1.
请简单的解释一下 ispostback
在 ispostback 状态 和 !ispostback 状态下都适合写那些代码(这是我最迷惑的地方)?
2.viewState 如何是不是只存在于客户端,用不用显示的销毁。会不会增加客户端的压力。
请简单的解释一下 ispostback
在 ispostback 状态 和 !ispostback 状态下都适合写那些代码(这是我最迷惑的地方)?
2.viewState 如何是不是只存在于客户端,用不用显示的销毁。会不会增加客户端的压力。
{
页面第一次加载不会执行到这;页面回发的时候(比如点服务器控件Button)会执行到这里!
}
if(!isPostBack)
{
页面回发的时候不会再执行,比如你的一个DataGrid的绑顶放到这里,界面回发后它会直接从ViewState里加载到回发前的状态,而不会重新绑定,这样会减少没必要的系统开销.
}至于ViewState,根据控件使用的场景判断是不是要使用.可以设置控件的EnableViewState 为false来禁用该控件的视图状态.
当一个请求发送至IIS时,Server端要返回一个html给客户端吧.还有,你点击了一个runat="server"的Button,客户端的内容要回发吧(相关值通过ViewState保存下来,发回Server).
!ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
2. VIEWSTATE会增加网络流量
ispostback = true 回传页面viewState 在隐藏在hidden input 中, 会影响性能。
URL有两种请求方式
post
get
当使用get时访问时 ispostback=false
使用post时 ispostback=true
要想确切的理解这些原理,建议学习一下ASP的页面提交方式 或ASP.NET页面生存周期
ispostback = true 回传页面
ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
ispostback = true 回传页面
ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
OK
{
页面第一次加载不会执行到这;页面回发的时候(比如点服务器控件Button)会执行到这里!
}
if(!isPostBack)
{
页面回发的时候不会再执行,比如你的一个DataGrid的绑顶放到这里,界面回发后它会直接从ViewState里加载到回发前的状态,而不会重新绑定,这样会减少没必要的系统开销.
}至于ViewState,根据控件使用的场景判断是不是要使用.可以设置控件的EnableViewState 为false来禁用该控件的视图状态.
if(ViewState["ispostback"]==null)
{
.......//设置控件的有关初始值
ViewState["ispostback"]=true;
}可见用ViewState控制变量是一个根本性的措施。只有当某些状态特别简单,业务定义与 IsPostback 完全一致时,我们可以使用 IsPostback 判断。如果你从来不使用 IsPostback ,我仍然会相信你会写出完全恰当的逻辑程序。IsPostback 原本是对页面状态管理中一种极其特别的情况进行简化,结果反倒被一些人当作与整个状态管理相冲突的概念。那么你可以忘掉使用 IsPostback 的习惯,即使你不使用它也是一样的。
对于ViewState在客户端的字节量可能比较大的问题,asp.net2.0的page对象可以使用重写PageStatePersister属性是用一条代码(new SessionPageStateSection(this))将其完全写入Session中,或者自己写一个PageStatePersister子类,是用20多行代码就能将ViewState保存在服务器端的windows临时文件目录中,甚至可以结合Cache和临时文件目录方法,总之ViewState将不再输出到客户端,其存取具有内存读取或者最低也就是硬盘读取速度,而不会通过internet网络。
SavePageStateToPersistenceMedium
LoadPageStateFromPersistenceMedium
两个方法。同样,自己写上20多条语句,可以把ViewState写到自己喜欢的任何地方。不一定输出到页面html中。
当一个请求发送至IIS时,Server端要返回一个html给客户端吧.还有,你点击了一个runat="server"的Button,客户端的内容要回发吧(相关值通过ViewState保存下来,发回Server).
!ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
ispostback = false 第一次加载页面;
ispostback = true 回传页面.
2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传.
会影响的.
ispostback = true 回传页面
ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
对于VIEWSTATE的持久化,有好几种方案,但我认为把VIEWSTATE持久化在SESSION中是比较简单的一种。
常用的方法有:
if(!ISPOSTBACK)////////用户第一次打开该页面
{
//检查用户是否已经有登陆
}
else
{
//关闭连接或报错
}l0f(凌风) ( ) 信誉:92 Blog 加为好友 2007-4-6 13:10:59 得分: 0
“那么用什么 既能保存住我的数据,有不增加网络开销呢?”
保存数据可以用Session或Cookie,但都会不同程度增加网络开销,其中Cookie的网络开销比Session小,但安全性比Session差,所以如果是安全较高的关键数据还是建议用Session保存。
!ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).
ispostback = false 第一次加载页面
ispostback = true 回传页面
2。
viewstate是把可字符化的信息生成保存在客户端的<input type="hidden" />标记中
页面传输的时候,会增加网络开销个人见解,共同学习