每个web控件都有个ViewState值,如果一个页面有太多的web控件而不禁用他们的viewstate值的话,会让页面速度大大降低。那么哪些控件的

EnableViewState="false" 哪些控件的EnableViewState="true"呢?

一个个控件说起
textbox,如果你只需要取他的text里面的值,而不是要他响应什么事件,那他的viewstate是可以禁用的.

linkbutton 和asp:button还有别的按纽,如果你只需要他响应单击事件,那他的viewstate可以禁用.

hyperlink,一般情况下不建议用他.他的功能和<a href基本上一样,如无特殊需要尽量不要用他.他的值如果是需要后台动态添加进去的

话,viewstate值不能禁用,否则在执行其它事件后他的值又不能显示,如果在前台就可以直接确定他的值,那他的viewstate是可以禁用的,但无论

他的值是需要前台就可以确定还是需要后台填充进去,<a href一样都能完成的.所以一般情况下不需要使用他

所有验证控件,只要不需要在后台对他再进行编辑,都可以禁用viewstate,包括自定义验证控件都可以禁用

dropdownlist,listbox还有checkboxlist这一类的都差不多,如果是前台就能确定他的选项值,那他的viewstate可以禁用,不影响他的取值,
但如果他的值是需要后台来梆定,又是需要在!ISPostBack里绑定的话,那他的viewstate值是不能禁用的,否则一执行其它事件以后,他的值就不

存在了.

其实最占用资源的就是datagrid,repeater,datalist等这些控件.
datagrid里面数据量庞大.但他的viewstate值在翻页,编辑等操作时起到很大的作用,所以datagrid的viewstate值不能完全禁用.
我们这里以datagrid为例介绍一个如何禁用一批viewstate来优化速度
datagrid里<asp:BoundColumn>.他在浏览时是个Label,编辑时他是一个textbox.而label和textbox都是带有viewstate.比如是一个5列20行的

datagrid,当他数据填充以后他就含有100个viewstate的值,这是一个庞大的数据..如果不想办法禁用是很占用资源的.
<asp:BoundColumn>方法虽然方便,但尽量大家不要使用,用如下方法代替
<asp:TemplateColumn>
              <ItemTemplate>
              <div align=center>
               <%#   DataBinder.Eval(Container,"DataItem.id") %>
              </div>    //不要使用任何控件,一样能显示,而且不占用资源
              </ItemTemplate>
              <EditItemTemplate>
               <asp:TextBox ID="Textbox2" Text='<%# DataBinder.Eval(Container,"DataItem.listid")%>' Runat="server"

EnableViewState=False Columns="自己赋值">
               </asp:TextBox>
              </EditItemTemplate>            
</asp:TemplateColumn>
datagrid里的项,viewstate能禁用的尽量禁用,太占资源了

===========================

第一看asp.net是在做项目之前,感觉收获也很大,第二次看gridview是在做完项目之后对GridView的回顾,这次的感觉是:我需要多想点,知识直到用时方觉少。直入正题吧,看gridview。

一、主要的事件

(1)RowDeleting 当点击删除按钮时,执行的删除代码。

(2)RowEding 当点击编辑按钮的时候执行的代码。

(3)RowUpdating 当点击修改按钮的时候执行的代码。

(4)SelectedIndexChanged || SelectedIndexChanging 事件,这两个事件用哪个都可以,只不过执行顺序有先后,当点击选择按钮的时候执行的代码,例如我们在用GridView做购物车的时候,就是用了选择按钮,就用到了SelectedIndexChanging事件。

(5)RowDataBound 事件,当页面实例化完毕(控件实例化完毕),执行完Page_Load()方法的时候(数据在页面上加载完毕),再来执行RowDataBound方法,一看Bound是过去式,就说明是在数据绑定完毕以后执行的方法。确实是,RowCreated事件是外面的Cell单元格创建好了,但是数据还未放到Cell单元格中时候所执行的方法。而RowDataBound事件是数据已经放到每一个Cell中,这时候所要执行的就是RowDataBound事件。进入RowDataBound事件中首先两层IF判断,判断这一行的Type(RowType),判断这一行数据的State,也就是状态,一般Type主要使用DataRow,数据行。判断State的时候要注意如果是编辑状态下,如果只是写了:

e.Row.RowState ==DataControlRowState.Edit

//这样只是给普通项判断是否出于编辑状态,对于交替项没有进行判断,如何判断:在后面在加上一句

e.Row.RowState ==(DataControlRowState.Edit | DataControlRowState.Alternate)

把上面的内容连起来:

if (e.Row.RowState== DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Edit |DataControlRowState.Alternate))

或者是这么写:因为e.Row.RowState是一个枚举类型的数据,枚举类型就对应着一个具体的int类型的值:

我们可以在即使窗口中进行调试,进行判断处于编辑状态的普通行和交替行对应的int类型的值:分别为4、5。

所以我们又可以这么来写:

if((int)e.Row.RowState== 4 || (int)e.Row.RowState == 5)

也可以。

二、GridView的属性

视图中查看到的属性就不说了。

首先第一个:GridView.EditIndex ---->

这个属性是得到当前编辑项的索引号,如果为修改操作,可以这么来做:

双击RowEditing事件进去写代码,首先为此属性赋值:GridView.EditIndex == e.NewEditIndex;//GridView的编辑项的索引号为当前项的索引号。记住:e.NewEditIndex也是GridView一个重要的属性,当前操作的这一行的索引号。

GridView一定要注意的:

三、ViewState——也是一个重点。

当.NET页面在运行的时候,存 储两份数据,一份在页面中显示出来了,一份存储ViewState中,首先一个认识:HTTP协议是一种无状态的协议,再来理解什么是无状态的协议,比如 说我这次访问了新浪,新浪页面一加载完毕就与我断开连接,因为新浪服务器已经给了我页面,于是新浪的服务器就与我的电脑断开连接了,我在看什么,我在干什 么都不知道,那么存储状态用什么呢?首先第一点:Session、再一点:Cookie、再一点:Application、再一点:在我们.NET中微软为我们提供了ViewState。

Session是存储在服务器端,用SessionID来区分不同的用户对象,Cookie是存储在用户的硬盘中的某一个文件夹下,之前也和大伙看了一下在浏览器中临时文件夹下的Cookie,怎么查找。

主要说ViewState,其实不止是GridView有ViewState,Repeater、DataList、TextBox等等表单控件和数据显示控件都有ViewState,它所带来的效果是什么,当我们在用TextBox来做一个注册页面的时候,如果是用普通的Form表单进行数据提交,如果账户已存在,会直接跳转到注册页面,表单中的数据全部没有了,而用.NET中的TextBox控件如果填写的用户名已存在,它不会把数据全部清除,而是保留着。这就是ViewState的作用。

在GridView中,如果不存在ViewState,把ViewState禁用掉,会出现什么情况:当第一次访问页面的时候数据正常加载,如果GridView中存在按钮,按钮 默认都提交,一旦提交,重新加载页面,数据全部没有,实例化出页面以后,页面对象有了,GridView对象实例化出来了,控件有了,但是在 Page_Load()方法中一旦判断是PostBack按钮提交过来的就不会再执行Page_Load()中的代码,Page_Load()是为实例化 好的控件填充数据的,一旦不走Page_Load()中的代码,数据也就不会填充到GridView控件中,我们看到的效果就是,一点击按钮 GridView没有了。这就是禁用ViewState的结果。可以解决,按钮代码执行完毕后在调用一下绑定数据的方法。

HTTP协议是一种无状态的协 议,我访问了一个aspx页面,服务器不会记住这个页面对象,一旦在服务器中声称好了我请求的这个aspx页面对象,便会立即释放,再次访问这个页面的时 候,服务器不会记得第一次访问时候的那个页面对象,而是再次生成一个页面对象,每次都是这样。ViewState的作用就是存放一份数据,让服务器记住我 这个页面已经实例化过一次了,直接通过ViewState从服务器端取得上次实例化好的页面对象。

这是.NET中所特有的,什么时候不必要用ViewState,也就是把ViewState禁用了呢?当页面上没有按钮的时候,可以禁用掉。所以我们在使用GridView的时候一般用超链接 <A>标签,而避免使用按钮,因为有按钮就必须有ViewState,页面加载的速度肯定会慢下来。再就是有ViewState的页面一定要分页。

后台为按钮添加JavaScript事件:

在RowDataBound事件中写代码,查找按钮,转换成对应的Button类型,然后为按钮的属性:OnclientClick赋对应的JavaScript代码即可。

例如:

(e.Row.Cells[5].Controls[2]as LinkButton).OnClientClick = "return window.confirm('确认要删除吗?')";

在RowUpdating事件中如何取得每一个Cell中的值:

string name =(GridView1.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text;

GridView1.Rows[e.RowIndex].Cells[1].Controls[0]

GridView1.Rows[e.RowIndex].Cells[1].FindControl("")

和DataList一定要区分好,DataList中是:

e.Item.FindControl("")as ....

转载于:https://www.cnblogs.com/yanergui/p/5014284.html

ViewState EnableViewState 禁用与使用心得相关推荐

  1. asp.net EnableViewState禁用与注意事项

    http://www.cnblogs.com/EveryMan/archive/2011/05/27/2060176.html 每个web控件都有个ViewState值,如果一个页面有太多的web控件 ...

  2. Asp.Net基础 - 4.ASP.Net揭秘之Input版自增 + 5.ViewState初探

    4.ASP.Net揭秘之Input版自增 4.2.思考:把IntValue1.html设为起始页 5.ViewState初探 5.1.只有设定了name的input.textarea.select的v ...

  3. C# viewstate

    Viewstate 处理不是form中可以传值的标签 进行传值. 可以禁用元素的viewstate 也可以禁用页面的 Enableviewstate="false";(在配置区域写 ...

  4. ViewState机制的解析(转自csdn)

    1         ViewState机制是什么? ViewState机制是asp.net中对同一个Page的多次请求(PostBack)之间维持Page及控件状态的一种机制.在WebForm中每次请 ...

  5. asp.net ViewState详解

    ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用 ...

  6. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    原文地址:http://www.cnblogs.com/edisonchou/p/3901559.html 开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件 ...

  7. 【转】真正理解ViewState

    [转]真正理解ASP.NET的ViewState (Truly Understanding ViewState) 作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了 ...

  8. 【转】ASP.NET ViewState详解

    (wyt今天学习了这篇文章,作为门外汉的我了解了很多页面控件数据加载的知识和viewstate的用法和原理.我想在日后的开发效率提升上会有很大的作用.) 转自http://www.cnblogs.co ...

  9. 【荐】【转】ASP.NET ViewState详解

    作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个 ...

  10. 真正理解ViewState(TRULY Understanding ViewState)

    引用地址(en):http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx ...

最新文章

  1. 阮一峰es6电子书_ES6理解进阶【大前端高薪训练营】
  2. postgresql 不同数据库不同模式下的数据迁移
  3. 信息学竞赛的常数优化、常见问题、代码风格相关
  4. (32)FPGA面试题时序约束
  5. 42.从非托管磁盘创建虚拟机
  6. hihocoder 1186
  7. Flink on YARN(上):一张图轻松掌握基础架构与启动流程
  8. 滨州智能dcs系统推荐_FM163E和利时DCS组件系统滨州
  9. Thinkphp5.1整合支付宝APP支付
  10. 典型相关性分析(清风建模学习笔记)
  11. 学术英语理工(第二版)Unit4课文翻译
  12. 行动诠释价值,城联优品韩董事长出席广东英德抗洪捐赠公益活动会
  13. 搬家公司怎么收费 搬家收费标准
  14. 法学专业能从事计算机工作吗,未来20年,这5个专业都是“香饽饽”,毕业生工作好找前途大好!...
  15. 任正非的“先僵化、后优化、再固化”方针
  16. ui设计是干啥的: ui设计师主要是做什么的呢
  17. oracle索引的事
  18. 市面上的计算机培训机构 哪家实力最强
  19. IAR教程之IAR常用功能简介
  20. 大学生?!!你必须要理解的15件事!

热门文章

  1. Pygame教程系列二:MoviePy视频播放篇
  2. openwrt1907使用mt7621+mt715 5G wifi吞吐量低问题解决方法
  3. 有关lodop.js和CLodop服务
  4. jQuery京东分类导航菜单
  5. 概率图模型(PGM):贝叶斯网(Bayesian network)初探
  6. 企业出口退税申报系统的Sqlite数据库破解及读写
  7. U8系统管理员怎么登录服务器,u8客户端如何登录服务器
  8. 大数据前端个人提升与团队规划
  9. SMT常见元器件贴片封装名称识别
  10. 如何搭建自己的云盘然后进行资源共享?——可道云版