我在Page_Load中初始化了viewstate["s1"]的值,在另外某个事件RefreshClick中改变了viewstate["s1"]的值。后来,我调试程序,发现值居然没有改变,还是我在Page_Load中设置的值,真是奇怪。
请问:viewstate是不是在ajax没用了?另外在RefreshClick事件中我加了一句:“GridPanel1.Reload(); ”虽然我发现这句不解决问题我删除了,但是我发现一件奇怪的事情, 程序执行后调用了page_load,再调用了RefreshClick,这我觉得正常,但是它又调用了page_load一遍,真是搞不懂。是不是Reload()专为客户端设计的?

解决方案 »

  1.   

     在ajax中 ,是这样。如果你的HTML 全是JS  ajax 的话 你可以完全禁用VIEWSTATE.
       
      

  2.   

    有用呀,viewstate,session,application都会有用。但是如果页面上没有runat=“server”的部分,就是说没有viewstate的话,那就用不成了
      

  3.   

    实际上,ajax也是get或post页面
    而get或post页面
    都会执行到Page_Load方法,这是asp.net页面定义的事件顺序
      

  4.   

    所以,asp.net定义了2个属性
    IsPostBack指示当前是Post回发页面
    IsCallBack指示当前是回调页面(注:如果是自己写的XmlHttp,这个值就不准确了)
      

  5.   

    可以使用。
    是否加了
    if(!IsPostBack)
    {
     Id="";
    }
    public string Id
    {
    get{  return ViewState["Id"].ToString();}
    set{  ViewState["Id"]=value;}
    }
    执行其他操作,页面回传会执行Page_Load
      

  6.   

    我在Page_Load中当然使用了if(!Page.IsPostBack) { viewstate["s1"]=""; } 。
    我试下来,觉得viewstate没用了。
      

  7.   

    有用。viewstate,session,application都会有用。但是如果页面上没有runat=“server”的部分,就是说没有viewstate的话,那就用不成了
      

  8.   

    我感觉是在pageload的初始化事件中没有加if(!IsPostBack) 
      

  9.   

    1.有用
    2.reload后,服务器端控件又变化了一次,当然要重新执行page_load事件
      

  10.   

    我再说一遍“我加了if(!Page.IsPostBack)”
      

  11.   

    对Ajax没有太多经验,不过如果你使用过ICallbackEventHandler接口应该对这个问题不陌生了。你可以理解为又生成了一个新的而面而不是原来的页面了,所以ViewState也就是分开了,不会引用到原来的内容。