1.
请简单的解释一下 ispostback
在 ispostback 状态 和 !ispostback 状态下都适合写那些代码(这是我最迷惑的地方)?
2.viewState 如何是不是只存在于客户端,用不用显示的销毁。会不会增加客户端的压力。

解决方案 »

  1.   

    if(isPostback)
    {
    页面第一次加载不会执行到这;页面回发的时候(比如点服务器控件Button)会执行到这里!
    }
    if(!isPostBack)
    {
    页面回发的时候不会再执行,比如你的一个DataGrid的绑顶放到这里,界面回发后它会直接从ViewState里加载到回发前的状态,而不会重新绑定,这样会减少没必要的系统开销.
    }至于ViewState,根据控件使用的场景判断是不是要使用.可以设置控件的EnableViewState 为false来禁用该控件的视图状态.
      

  2.   

    1.(!ispostback ) 说明不为回发.
       当一个请求发送至IIS时,Server端要返回一个html给客户端吧.还有,你点击了一个runat="server"的Button,客户端的内容要回发吧(相关值通过ViewState保存下来,发回Server).
       !ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
      

  3.   

    ispostback用于判断页面是否刷新,如果刷新了this.ispostback的值就为True  从而可以值得!ispostback的值在每次刷新的时候都为False  所以,一些需要保存的值或状态应该写在!ispostback里面。2  viewState和cookie一样都是存在于客户端的,应该会自动销毁。以上是我简单的一些看法,不对的请大伙拍砖。
      

  4.   

    1. 楼上可以把PostBack简单理解为访问的方式是GET还是POST,如果不理解GET和POST,就把POST理解为FORM的提交,其它都是GET.
    2. VIEWSTATE会增加网络流量
      

  5.   

    ispostback = false 第一次加载页面
    ispostback = true  回传页面viewState 在隐藏在hidden input 中,  会影响性能。
      

  6.   

    确切的说
    URL有两种请求方式 
    post 
    get 
    当使用get时访问时  ispostback=false
    使用post时   ispostback=true
    要想确切的理解这些原理,建议学习一下ASP的页面提交方式 或ASP.NET页面生存周期
      

  7.   

    ispostback = false 第一次加载页面
    ispostback = true  回传页面
    ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
      

  8.   

    ispostback = false 第一次加载页面
    ispostback = true  回传页面
    ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
    OK
      

  9.   

    if(isPostback)
    {
    页面第一次加载不会执行到这;页面回发的时候(比如点服务器控件Button)会执行到这里!
    }
    if(!isPostBack)
    {
    页面回发的时候不会再执行,比如你的一个DataGrid的绑顶放到这里,界面回发后它会直接从ViewState里加载到回发前的状态,而不会重新绑定,这样会减少没必要的系统开销.
    }至于ViewState,根据控件使用的场景判断是不是要使用.可以设置控件的EnableViewState 为false来禁用该控件的视图状态.
      

  10.   

    假设在页面上有几个选项卡,选择了相应的选项卡才动态装载相应的ascx,那么在页面postback的时候这个“当前选择的选项卡”状态就是一个很灵活状态,它与IsPostback的含义完全不同,与此相关的逻辑程序就不能写到IsPostback判断下,硬要(有些人想当然地往里边套)写进去就会自己把自己搞乱。假设对一个控件赋值,我们的逻辑定义就是“默认值是....”的,那么显然可以通过IsPostBack来写。当然我们也可以通过一个ViewState开关变量来控制。例如:
      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网络。
      

  11.   

    在asp.net1.1中没有PageStatePersister属性,但是更为根本的东西是
      SavePageStateToPersistenceMedium
      LoadPageStateFromPersistenceMedium
    两个方法。同样,自己写上20多条语句,可以把ViewState写到自己喜欢的任何地方。不一定输出到页面html中。
      

  12.   

    1.(!ispostback ) 说明不为回发.
       当一个请求发送至IIS时,Server端要返回一个html给客户端吧.还有,你点击了一个runat="server"的Button,客户端的内容要回发吧(相关值通过ViewState保存下来,发回Server).
       !ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
      

  13.   

    1.ispostback判断是不是第一次加载本页面:
    ispostback = false 第一次加载页面;
    ispostback = true  回传页面.
    2.ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传.
    会影响的.
      

  14.   

    ispostback = false 第一次加载页面
    ispostback = true  回传页面
    ViewState它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 )。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。
      

  15.   

    如果楼主想把POSTBACK搞清楚,我觉得最好的办法就是对应用程序进行单步调试,这样就可以发现什么时候会进入ISPOSTBACK块,什么时候会进入!ISPOSTBACK块对于VIEWSTATE,你完全可以实现自己的一套VIEWSTATE持久化方法,就象上面有人说的一样。这样就可以既减小网络传输负担有可以保持状态了。
    对于VIEWSTATE的持久化,有好几种方案,但我认为把VIEWSTATE持久化在SESSION中是比较简单的一种。
      

  16.   

    关于ISPOSTBACK和!ISPOSTBACK,楼上好多专家都解释得很清楚了。
    常用的方法有:
    if(!ISPOSTBACK)////////用户第一次打开该页面
    {
        //检查用户是否已经有登陆
    }
    else
    {
        //关闭连接或报错
    }l0f(凌风) ( ) 信誉:92    Blog   加为好友  2007-4-6 13:10:59  得分: 0    
    “那么用什么 既能保存住我的数据,有不增加网络开销呢?”
    保存数据可以用Session或Cookie,但都会不同程度增加网络开销,其中Cookie的网络开销比Session小,但安全性比Session差,所以如果是安全较高的关键数据还是建议用Session保存。  
     
      

  17.   

    当一个请求发送至IIS时,Server端要返回一个html给客户端吧.还有,你点击了一个runat="server"的Button,客户端的内容要回发吧(相关值通过ViewState保存下来,发回Server).
       !ispostback 我们一般理解为: 当页面第一次加载时执行。(点击按钮什么的,导致页面刷新的均不在!ispostback 的范围内).
      

  18.   

    ispostback最好写验证之前得网页
      

  19.   

    1。
    ispostback = false 第一次加载页面
    ispostback = true  回传页面
    2。
    viewstate是把可字符化的信息生成保存在客户端的<input type="hidden" />标记中
    页面传输的时候,会增加网络开销个人见解,共同学习
      

  20.   

    可以拿ispostback属性和Init方法进行比较一下就会马上清楚。viewstate是保存状态。只要是在本页面进行操作。viewstate这值都会被保存下来。相当于ASP当中的隐含域。
      

  21.   

    对于一些涉及到安全性的数据最好不要用viewstate保存,因为用户可以查看源文件看到