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。

云步云72.5元/月起云服务器,香港安畅/葵湾/将军澳/沙田/大浦CN2机房,2核2G5M

云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...

星梦云60元夏日促销,四川100G高防4H4G10M,西南高防月付特价

星梦云怎么样?星梦云好不好,资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器 。官方网站:点击访问星梦云官网活动方案:1、成都电信年中活动机(封锁UDP,不可解封):机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路4vCPU4G40G+50...

阿里云秋季促销活动 轻量云服务器2G5M配置新购年60元

已经有一段时间没有分享阿里云服务商的促销活动,主要原因在于他们以前的促销都仅限新用户,而且我们大部分人都已经有过账户基本上促销活动和我们无缘。即便老用户可选新产品购买,也是比较配置较高的,所以就懒得分享。这不看到有阿里云金秋活动,有不错的促销活动可以允许产品新购。即便我们是老用户,但是比如你没有购买过他们轻量服务器,也是可以享受优惠活动的。这次轻量服务器在金秋活动中力度折扣比较大,2G5M配置年付...

enableviewstate为你推荐
深圳公交车路线深圳公交线路qq怎么发邮件如何通过QQ发送邮件神雕侠侣礼包大全神雕侠侣陈晓礼包兑换码怎么获得保护气球气球保护液可以用什么来代替?bluestackbluestacks下载的东西在哪安全漏洞计算机一般存在哪些安全漏洞?电子商务网站模板电子商务网站模板有免费的吗?电子商务网站模板哪里有?电子商务网站模板怎么找?小米手柄手机用小米手柄能玩什么游戏小米手柄小米手柄和飞智手柄哪个好?微信电话本怎么用微信电话本如何使用?
域名购买 快速域名备案 怎么申请域名 华为云服务 国内免备案主机 免费主机 godaddy优惠码 鲜果阅读 debian6 大容量存储器 股票老左 服务器干什么用的 美国网站服务器 空间登陆首页 中国电信测速器 独立主机 免费个人主页 注册阿里云邮箱 免备案jsp空间 googlevoice 更多