enableviewstate如何使用DataGrid控件

enableviewstate  时间:2021-01-16  阅读:()

C# enableViewState属性有什么用

EnableViewState 属性 指示是否在页请求之间保持视图状态。

如果要保持视图状态,则为 true;否则为 false。

默认值为 true。

以上为官方对 EnableViewState 的解释,有些难懂,我们以示例的方式解释,我们创建一个 Web Form,并添加一个 ListBox、一个 Button、一个方法。

程序代码 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void AddItem(object sender, EventArgs e) { list.Items.Add(DateTime.Now.Ticks.ToString()); } </script> <html xmlns="/1999/xhtml" > <head runat="server"> <title>EnableViewState 属性</title> </head> <body> <form id="form1" runat="server"> <div> <asp:ListBox ID="list" runat="server"> <asp:ListItem Text="EnableViewState 属性" Value="1"></asp:ListItem> </asp:ListBox> <asp:Button ID="btn" runat="server" Text="追加一个 Item" OnClick="AddItem" /> </div> </form> </body> </html> 在浏览器中访问该网页,得到 HTML 源文件中如下内容: <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIyNTcyODQzNWRkKV9J6dx90HkLpaqCRtS3s4xsNnc=" /> 这个 hidden 框存储的是各个控件的属性值与状态,比如 ListBox 的 Text、Value、Selected 等,这也是为什么在 ASP.NET 里,可以在服务器端获得列表的 Text 值的原因。

开始实验 现在点击按钮,服务器端将执行 AddItem 方法,ListBox 中的内容也随之增多,查看 HTML 源文件中的“__VIEWSTATE”也随之增多 。

关于 DateTime 请参见 ASP.NET 时间操作。

再次实验 现在我们修改 ListBox 的 EnableViewState 属性为 false。

<asp:ListBox ID="list" runat="server" EnableViewState="false"> 再次点击几下按钮,我们可以发现,之前点击按钮添加的 Item 都不见了,现在每次点击按钮,ListBox 中都只有两个 Item,一个为静态指定的,一个是通过 AddItem 方法添加的。

这是由于 ListBox 的内容没有通过“__VIEWSTATE”传送到服务器端,服务器端不知道 ListBox 之前还动态添加的有内容。

注意观察,添加的数字并不相同,这说明每次点击都执行了 AddItem 方法,而不是有些文章所说的,使用 EnableViewState="false" 时方法只执行一次,方法是每次都执行,只是由于没有获得之前动态添加(编辑、删除)后的内容,所以只有最新添加(编辑、删除)的内容。

总结 EnableViewState 指定是否向服务器端传送某(些)控件的属性值、状态。

EnableViewState 的默认值为 true,设置为 false 可以降低数据传送量,当然应该在程序逻辑允许设置为 false 的情况下。

EnableViewState 可用于控件,也可用于 @ Page、@ Control、@ Master 指令语法。

当控件的 EnableViewState 的设置与指令语法的设置不一致时,取 false 值。

如何关闭viewstate

禁用 ViewState 可以针对单个控件、整个页面或整个应用程序禁用 ViewState,如下所示: 每个控件(在标记上):控件属性里面设置viewstate的值为false. <asp:datagrid EnableViewState="false" ?/> 在设计页面,手动点击一下Repeater区域,然后在属性列表框中设置EnableViewState="false" 每个页面(在指令中):在页面的page指令中设置页面的enableViewState属性为false <%@ Page EnableViewState="False" ?%> 每个应用程序:(在 web.config 中) <Pages EnableViewState="false" ?/> 关闭: enableviewstate="false" <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" enableviewstate="false" %> 打开: enableviewstate="true" <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" enableviewstate="true" %>

为什么选中DropDownList选项,点击Button时 DropDownList会消失?

首先,如果你指的是点击Button时很短的时间内DropDownList中没有值的话,那是因为浏览器准备对页面进行重画,等待服务器传来的新数据。

如果点击Button页面内容返回后,DropDownList还是空的,说明你的DropDownList控件的EnableViewState属性设置为false,且你在代码中的Page_Load事件或Button事件中也没有为DropDownList控件重新赋值或你在事件中把DropDownList控件值清空了。

this.EnableViewState是什么意思?

this.EnableViewState的意思是是否要将状态保存到页面的ViewState中去 如果是页面的this.EnableViewState=false的话那么整个页面的ViewState就被禁用掉了,如果页面回发的话就无法保存页面的状态了。

如文本框中输入的值。



====================== 不明白吗? 就是说ViewState这个属性是保存页面的一个状态,比方说你原先文本框里面输入几个字符提交到服务器上去,如果这个时候ViewState被禁用了也就是说this.EnableViewState=false,页面刷新完文本框里的值就被清空了,如果没有禁用的话this.EnableViewState=true的话文本框里的值还在。

你自己可以去试下的,体验会深刻一点

如何解决ViewState过长,<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM2

<%@ Page Language="C#" EnableViewState="false" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %> 在顶部中加入 EnableViewState="false" ,就可以去掉了,前提是你用不到它

如何使用DataGrid控件

〔DataGrid控件〕 在三种控件当中,DataGrid是迄今为止功能最为丰富的,但也是最不灵活的控件。

这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。

每一条记录输出时会建立一对<tr>标签,而每个字段的值输出时则建立一对<td>标签。

DataGrid含有几个属性可以提高其可用性。

如,通过设置DataGrid的AllowSorting属性为true,并加入少量代码,DataGrid就具备了按不同字段排序的功能。

此外,设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid的可用性。

除了在可用性方面的支持以外,DataGrid同时也相当节省开发时间。

使用DataGrid在WEB页面上显示数据只需要两行代码。

一行用来设定与DataGrid绑定的数据源(DataSource),另一条则用来执行绑定命令(DataBind())。

当然,在Repeater中实现这样的功能并非不可能,只是,相比较使用DataGrid而言,你需要花费相当多的时间和精力来实现这些功能。

尽管DataGrid有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽视。

首先,如前所述,DataGrid在个性化输出数据方面功能有限。

当然,你可以定制字体、颜色以及线条宽度等等,但它始终只能是HTML表格。

每个在DataGrid中的列都是DataGridColumn类的一个实例。

有五种DataGrid列的形式: ·BoundColumn ·ButtonColumn ·EditColumn ·HyperLinkColumn ·TemplateColumn 每种类型都会以一种方式允许页面访问与DataGrid进行交互。

例如,BoundColumn将DataSource的字段值显示为纯文本;而HyperLinkColumn则将之显示为一个超级链接。

另外,开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。

尽管DataGrid具有这么多的增强可用性的属性,却仍然显得死板而不够灵活。

这是因为,不论什么样的属性,都需要对DataGrid所生成的表格进行相关的设置而生效。

这无疑会使表格变得臃肿而失去灵活性。

例如,DataGridColumn的设置会对表格的每一行的相应列生效。

DataGrid的这种局限性阻碍了更有创意地显示数据。

比如,你希望每五条记录被显示在一行,或根本不想要表格来显示数据,你将不得不放弃使用DataGrid。

DataGrid的第二个缺陷是它的性能。

在三种数据控件中,DataGrid是相对性能最差的。

由DataGrid所生成的ViewState将会相当庞大,特别是在DataGrid含有较多的行时。

当然,你也可以关闭ViewState功能,但代价是你将不能使用排序、分页以及记录编辑等功能。

为了测量DataGrid的性能,我使用了微软的Web Application Stress Tool (WAST)。

精确的测试条件设定以及测试用代码将会在本文的结尾给出。

WAST将会对WEB服务器发出对一个特定URL的请求。

每个测试将会针对一个URL在一分钟之内连续不断地请求。

WAST将会一个代表性能的数值,代表WEB服务器将会在一秒钟内执行ASP.Net页面多少次。

两个测试将显示一个仅仅显示数据的DataGrid。

DataGrid将会显示Northwinds数据库中的Customers表的4个字段的内容(总计91条记录)。

DataGrid的AutoGenerateColumns属性将会被设为True。

第一个测试将DataGrid置于一个Form中,第二个则不置于Form中。

将控件置于Form中而不指定其EnableViewState为False,则控件将会一直使用ViewState来维持其状态。

对ViewState的设定是为了有一个耗时的处理过程,来看一下它对于每秒种的页面请求有什么样的影响。

测试结果见图1。

图1:对DataGrid的每秒请求次数 在下面我们要讨论并测试的DataList和Repeater中,我们会看到它们的性能将优于DataGrid。

〔DataList控件〕 如前所述,DataGrid使用表格来显示数据。

你也许需要更进一步地控制数据的显示。

例如,你想使数据在表格中显示,但不是每行只有一条记录,而是多条。

又或者,你并不想使用表格来显示数据,而是只将它们显示在一系列<span>标签中。

DataList放弃了DataGrid中列表显示数据的概念,而是使用事先定义好的模板(Template)来定制显示。

通过使用模板,可以同时使用HTML标签或数据绑定。

这里的数据绑定的形式为:<%# … %>,用来显示数据源中给定条目的数据记录。

如下的ItemTemplate将会显示数据源中CompanyName字段: <asp:DataList runat="server" id="myDataList"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "CompanyName") %> </ItemTemplate> </asp:DataList> 通过修改上面的模板,我们可以使CompanyName字段显示为粗体字,而ContactName字段则以正常式样显示在CompanyName之下。

<asp:DataList runat="server" id="myDataList"> <ItemTemplate> <b><%# DataBinder.Eval(Container.DataItem, "CompanyName") %></b> <br /> <%# DataBinder.Eval(Container.DataItem, "ContactName") %> </ItemTemplate> </asp:DataList> 对于DataList数据源中的每一条记录,ItemTemplate会通过定义HTML标签来以相同的样式显示数据。

ItemTemplate还支持其它其它6种模板: ·AlternatingItemTemplate ·EditItemTemplate ·FooterTemplate ·HeaderTemplate ·ItemTemplate ·SelectedItemTemplate ·SeparatorTemplate 默认情况下DataList会将记录显示在HTML表格中。

然而,通过设定RepeatColumn属性,你可以设置在一行中显示多少条记录。

更进一步,你甚至可以指定DatList的内容不显示在表格中,而是<span>标签中。

这可以通过设定RepearLayout属性来实现。

通过模板、RepeatColumn和RepeatLayout属性,很明显DataList在定制数据输出样式方面较DataGrid更具灵活性,使得用户界面设计可以更加友好。

当然,我们还需要进行功能性的对比,如分页、排序、记录编辑等等。

通过EditItemIndex模板和EditCommand,UpdateCommand以及CancelCommand事件,DataList将支持记录编辑的功能。

不过,比较DataGrid而言,这需要耗费更多的开发时间来实现。

这种开发时间上的不一致主要有两个原因: ·编辑/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自动添加;而在DataList中则需要手动添加。

·DataGrid的BoundColumn列样式自动使用文本框控件来显示记录编辑界面。

而在DataList中,你必须通过EditItemTemplate明确地指定使用什么样的编辑界面。

实现DataList中的分页、排序功能同记录编辑功能情况一样,并不算非常复杂。

这些功能可以通过巧妙的编程加以实现,只是耗费一些开发时间。

所以,如果需要用户对数据记录进行排序或编辑的话,使用DataGrid要比使用DataList方便得多。

DataList的性能要比DataGrid好一些,特别是当DataList被包含在Form当中时。

图2显示了WAST对DataList的测试。

图2:对DataList的每秒请求次数 可以看出,在被Web Form包含的情况下,DataList的性能要明显好于DataGrid。

〔Repeater控件〕 Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。

Repeater会按照你所要求的样式严格地输出数据记录。

所以,如果你不想以表格方式或者简单的<span>输出数据,那么最好使用Repeater。

与DataList一样,Repeater使用模板来指定输出样式。

Repeater支持如下五种模板: ·AlternatingItemTemplate ·FooterTemplate ·HeaderTemplate ·ItemTemplate ·SeparatorTemplate HederTemplate和FooterTemplate指定在真正的记录输出之前或之后应处理的HTML内容。

AlternatingItemTemplate和ItemTemplate则指定实际的每条输出记录的HTML样式。

如,你需要绑定一个包含雇员信息的DataSet到一个Repeater,字段名为EmployeeName。

如果你想在页面中不排序地显示这些记录,你可以使用如下的语句: <asp:Repeater runat="server" id="rptEmployees"> <HeaderTemplate> <ul> </HeaderTemplate> <ItemTemplate> <li><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></li> </ItemTemplate> <FooterTemplate> </ul> </FooterTemplate> </asp:Repeater> Repeater类不是继承自WebControl类的,这一点与DataGrid和DataList不同。

所以,Repeater没有样式方面的属性可供设定。

也就是说,如果你想格式化输出Repeater的数据记录,你必须使用HTML标签来设定样式。

如,在一例中,如果我们想将雇员名字显示成粗体,我们必须在ItemTemplate设置相应的HTML标签: <ItemTemplate> <li><b><%# DataBinder.Eval(Container.DataItem, "EmployeeName")%></b></li> </ItemTemplate> 而如果使用DataGrid或DataList,我们只通过设定ItemStyle-Font-Bold属性为True即可实现。

Repeater在格式化设定上的欠缺,直接反映到开发时间的延长上来。

对输出数据样式上的越多要求,就越会导致开发周期的延长。

这些在模板中规定样式的HTML标签也越发得显得混乱,而且,在将来页面更改时会更加困难,特别是当一个新的开发人员接替工作时。

而使用DataGrid或DataList你尽可以只设定样式属性,而不使用模板。

而且,如果使用Visual Studio.Net或ASP.Net Web Matrix工作时,这些属性更可以被直接设定而无需编码。

因为Repeater开发时间的延长,其在内建功能(分页、排序及编辑)上的支持也显得不足。

因此在可用性方面,Repeater有着明显的缺陷。

当然,<b>如果</b>用户对于如何显示数据无所谓的话,这也算不了什么大问题。

我之所以强调这个“如果”,是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录,但这样的要求往往会在开发后期,或在他们能看到显示出来的记录后产生。

Repeater唯一优于DataGrid和DataList的特点是它的性能,尤其明显优于DataGrid。

而比DataList略高一点点。

〔结论〕 在ASP.Net页面上显示数据时,多数的程序员会选择他们所熟悉的控件来使用,特别是DataGrid。

然而,这样盲目的选择在没有“最好的通用控件”的情况下是不明智的。

在选择控件来显示数据前,不妨问自己几个问题来帮助决策:是否允许用户对记录排序?是不是记录需要显示在非表格的情况下?页面是否会被高频度地访问,因此应多考虑性能? DataGrid提供了最多的功能,如允许访问者对记录编辑、排序或分页。

同时它也是最容易使用的,甚至于简单到只需要将之添加到页面中而不必额外编写代码。

不过这些易用性是以性能的损失为代价的。

DataGrid在三种控件中是效率最低的,特别是在使用Web Form的情况下。

通过使用模板,DataList提供了比DataGrid更加优秀的界面效果。

不过这需要以牺牲一定的开发时间为代价。

为了添加排序、分页和编辑功能,程序员不得不花费比使用DataGrid更多的精力来进行编码,虽然它的性能要优于DataGrid。

最后,Repeater允许对数据记录作最大限度的HTML定制。

通常,使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。

另外,它不支持内建的编辑、排序和分页功能。

所幸的是,Repeater在性能上要优于其它两种控件,特别是明显优于DataGrid。

ucloud香港服务器优惠活动:香港2核4G云服务器低至358元/年,968元/3年

ucloud香港服务器优惠降价活动开始了!此前,ucloud官方全球云大促活动的香港云服务器一度上涨至2核4G配置752元/年,2031元/3年。让很多想购买ucloud香港云服务器的新用户望而却步!不过,目前,ucloud官方下调了香港服务器价格,此前2核4G香港云服务器752元/年,现在降至358元/年,968元/3年,价格降了快一半了!UCloud活动路子和阿里云、腾讯云不同,活动一步到位,...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

香港云服务器 1核 256M 19.9元/月 Mineserver Ltd

Mineserver(ASN142586|UK CompanyNumber 1351696),已经成立一年半。主营香港日本机房的VPS、物理服务器业务。Telegram群组: @mineserver1 | Discord群组: https://discord.gg/MTB8ww9GEA7折循环优惠:JP30(JPCN2宣布产品可以使用)8折循环优惠:CMI20(仅1024M以上套餐可以使用)9折循...

enableviewstate为你推荐
可以发外链的论坛可以发外链的论坛有那些?找不到光驱为什么我的电脑光驱找不到?淘宝收费淘宝卖东西收多少手续费暴风影音怎么截图暴风影音怎么截屏啊?51自学网站有哪些免费自学网vista系统重装Vista系统的重装的步骤,有系统恢复盘办公协同软件oa办公系统软件有哪些滚动代码来回滚动代码如何建立一个网站如何建立一个网站?天天酷跑刷金币如何使用八门神器给天天酷跑刷钻刷金币
深圳域名注册 国外vps 淘宝二级域名 60g硬盘 css样式大全 e蜗牛 新天域互联 免费防火墙 vip购优惠 电信主机 流媒体加速 服务器维护 防cc攻击 江苏徐州移动 重庆服务器 rewritecond 电信主机托管 phpinfo 美国vpn服务器 木马检测 更多