1.ViewState怎么禁用2.据说每个控件都又ViewState属性,怎么用3.
if (ViewState["search"] != null)
{
strWhere = ViewState["search"].ToString(); }ViewState和Session一样也是一个缓存变量吗?他的生命周期是什么4. 大家一般怎么用他
if (ViewState["search"] != null)
{
strWhere = ViewState["search"].ToString(); }ViewState和Session一样也是一个缓存变量吗?他的生命周期是什么4. 大家一般怎么用他
解决方案 »
- TreeView控件结合gridview控件的编辑,插入,删除功能
- 问个菜鸟问题,Response.Write后继续执行代码
- 关于Datatable的问题
- 重写.NET验证控件
- 谁能说说目前asp.net2.0最好的url重写代码或组件?
- 自定义的用户控件在页面上的定位问题
- 用ASP.NET2.0有没有好的方法实现弹出窗口录入数据,提交后返回父窗口的功能
- 如何用PasswordRecovery控件给用户发送密码?请大侠们给出一个例子,谢谢
- [求解]Asp.Net调用MySQL分页存储过程问题!(急)
- 虚拟主机上 global.asax 调用 StreamWriter 失败
- FCKeditor 操作符丢失
- sql语句求解
分页的里面有viewstate的用法,封装等希望对你有帮助
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ViewState["pageNumber"] = 1;//当前页
ViewState["pageCount"] = 1;// 总页数
BindGridView();
}
}
private int PageNumber
{
set { ViewState["pageNumber"] = value; }
get { return Int32.Parse(ViewState["pageNumber"].ToString()); }
}
private int PageCount
{
set { ViewState["pageCount"] = value; }
get { return Int32.Parse(ViewState["pageCount"].ToString()); }
}private void BindGridView()
{
int pages=1;
DataTable dt = PageBean.GetPage("table", "id", PageNumber, PAGESIZE, "", "id desc", "",out pages);
PageCount = pages;
GridView1.DataSource = dt;
GridView1.DataBind();}跟Session的用法一模一样 ,唯一区别是作用域。
ViewState只是在当前页面有效。离开页面就消失。
下面是用法的参考 太多就不C出来了
ViewState用法
也可以在整个网站禁用ViewState
在Web.Config的<system.web>加入:
<pages enableSessionState="true" enableViewState="false" enableViewStateMac="false">
可以全局禁用ViewState据说每个控件都又ViewState属性,怎么用 因为控件都继承于Control类,Control对视图状态进行了处理所以每个都有ViewState和Session一样也是一个缓存变量吗 是的,不同的是ViewState是页面级别的,只在当前页面有效,其实是序列化base64格式的存储在页面的Hidden中,ViewState可以减少服务器负担,但是如果数据量过大的话会引起性能问题,比如一个页面50多K,可以存在Session中使用服务器资源,而解放客户端,在ViewState中保存尽量少的数据。如果实在需要在ViewStatge中放置大量数据建议使用maxPageState- FieldLength对ViewState启用分块传输。
<%@ Page Language="C#" … maxPageStateFieldLength="100"%>
input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/" />
ViewState在客户端的保存形式,保存在一个ID为__VIEWSTATE的Hidden中,它的Value是使用Base64编码后的字符串。这个字符串实际上是一个对象序列化之后的结果。这个对象保存了整个页面的控件树的ViewState。可以使用一些工具将这个字符串进行解码查看其内容,比如ViewStateDecoder,ViewStateAnalyzer。
Page对客户端请求进行处理,在处理的过程中先是将客户端提交的_VIEWSTATE反序列化为对象,调用Control的相关方法给所有的控件装载数据,这些数据是上次请求结束后控件的状态数据。在请求结束之前调用Control的相关方法得到所有控件的被修改过的状态数据,之后Page将其进行序列化,并返回给客户端。在Control中又具体调用StateBag类的方法完成状态数据的加载和保存。
ViewState其实就是将值加密后存到页面上的一个HiddenField中
-=--UP
声明:由于本文是在网上g的,出处忘了,所以如有冒犯,还请与我联系。
ViewState是ASP.NET的一个独创设计。它为用户在进行Web开发时带来了极大的便利,特别是对于一个WEB开发新手来说,它完全可以不用自己去维护WEB控件的状态,在进行事件驱动开发时,用户只管通过控件ID来获取当前控件的值,而其它的细节ASP.NET都是对用户透明的,所以非常易于入门。而它所带的负面影响也是明显,有时候也是而严重的,最严重的就如上的那篇回发事件执行很慢,甚至时常出现“Validation of viewstate MAC failed”你也不会感到意外。
那么我们该如何来控制和使用ViewState呢?我想最好还是禁用它,但是也不绝对是这样的。你可以根据你的应用来决定是否禁用 ViewState,那么决定因素有哪些呢?
1)你的生产环境,也就是说你是在哪里使用的。如果你的是在局域网内部,或是光纤到桌面(也不用光纤,速度有保证就行,这里只是一个比喻)。那么你可以放心使用ViewState。
2)你对Web开发的理解程度。这是主观因素,如果你对禁用ViewState有足够的控制能力,那么你可以放心的在web.config全局禁用 ViewState。
3)如果你主观上能够接受ViewState,你希望能充分利用它给我们带来的便利。并且你可以很好的控制ViewState,不让它成为你的性能瓶颈。
4)你的应用场合,比如你如果是网站前台的话,那请尽量禁用ViewState。(当然也最好不要使用PostBack)
可能还有其它的原因来决定你是否使用ViewState。这里我们还是希望能够来总结一下ViewState带给我方便的同时,它都带了什么副产品给我们了:
1)最直观的就是页面体积。使用了ViewState,它会维护所有的控件的状态,在进行PostBack的时候,会适时的进行控件状态的还原。这是什么概念呢?就是控件的值(例如DropdownList里面的所有选项)除了通过HTML的方式显示给用户外,它同时在ViewState中还有一个备份,这个备份会以一个隐含变量的方式存在服务器发送的HTML代码中,同时在PostBack时会把这些ViewState再传回给服务器端。无形中增加了一倍以上的页面体积。
2)增加了体积了,自然就增加了网络传输。当然页面的反应速度就下降了。
3)在服务器端增加了一些额外的处理时间。ViewState增加了体积,那么对这些ViewState值的序列化和反序列化的发的时间也是不可小视的。另外,在还原控件状态时,需要对控件进行的遍历和赋值,这个时间也应该算是一个比较大的开销。
禁用ViewState,解决了一些问题。但是做为WebForm生命周期的一部分,那个ViewState处理函数还是需要被调用的,只是它们在判断 EnableViewState==false以后,所做的事情就比较少了,也就节省时间了。如果你仔细查看一下禁用ViewState的页面,你还会发现有隐含变量__VIEWSTATE。如果你想让这个隐含变量也消失,那么你可以重写Page类的PageStatePersister,来达到这个目的。但是据我的经验,这样做以后好像会有一些其它影响,所以这里建议你尽量不要这样做(其实也没必要这么做)。
那么禁用了ViewState,是不是说我们就无法利用ViewState给我带来方便了?绝对不是这样的,正因为我们禁用了 ViewState,那么我们就可以开始“滥用”ViewState了。因为有些情况下,我们需要在相同页面的不同的控件中使用一些相同的值。比如,你在查询完数据后,总页数也要在相同页面中的一些在其它控件里使用。这时因为不同控件不在同一个类中,无法使用变量传递,如果你放在缓存和Session中,那么冲突和过期时间就不是你所控制的了。这时我们就可以把它给存放在ViewState,因为ViewState的作用域仅限本页本次请求,页面输出后就随着页面实例而回收了。而因为我们禁用了ViewState了,这时我们在ViewState存的值并不会被序列化到客户端去。这样的“滥用”反而却会给我们的开发带来非常大的方便和灵活。
//存取信息
ViewState["UserNameID"]="1000";
//读取信息
string NameID=ViewState["UserNameID"].ToString();
用的时候
string aa=ViewState["名称"].tostring();
session是服务器里面保存的
session一般用于保存用户信息,是由语言实现的,与web服务器无关,内容是保存在服务器上面的 ViewState的用法: // 当前页
public int PageIndex
{
get
{
if (ViewState["pageindex"] != null)
{
return int.Parse(ViewState["pageindex"].ToString());
}
return 1;
}
set
{
ViewState["pageindex"] = value;
}
}
public int PageIndex
{
get
{
if (ViewState[ "pageindex "] != null)
{
return int.Parse(ViewState[ "pageindex "].ToString());
}
return 1;
}
set
{
ViewState[ "pageindex "] = value;
}
}
}
如果你location.href="当前页面";那么ViewState就会消失
其实你可以把ViewState看成是一个<input type="hidden" >
其实微软也是这样实现的只不过是把viewState给压缩了一下而已
这个其实就是为什么服务器控件会多少的影响一点性能的原因
viewstate 就是当前页面有效。
session 就是本次会话中都有效。
viewstate的作用域要比session的小。
viewstate 一般用户存储当前页面变量
向分页的时候可以存储当前第几页。
像button 那种几乎可以不计了
你可以随便打开一个asp.net页面 在右击源代码你就可以看到viewstate
保存和还原服务器控件视图状态的一种机制。与传统的“同
一页面”不同,ASP.NET 中“同一页面”的每一个请求都会
导致服务器重新生成该页面,但是新生成的页面并不包含原
来页面的数据。ViewState 的任务就是保存原来页面中服务器
控件视图状态的数据供新页面使用。从这个意义上讲,
ViewState 也可以看作是一种在页面间传递数据的工具。
ViewState 的工作原理是:作为一个隐藏的窗体字段在客
户端和服务器之间传递,可见,滥用ViewState 会加重页面
回传的负担,从而降低应用程序的性能。此外,ViewState 也
能被控件、页面和应用程序禁用。示例如下(在同一页面中):
ViewState["id"]=TextBox1.Text; //数据保存
Label1.Text=ViewState["id"].ToString(); //数据取出
ViewState.Remove("id"); //数据移除 生命周期 应用范围 数据类型 数据大小
使用 ViewState 当前页 单用户 全部 不限