none
再请教一个控件状态的问题 RRS feed

  • 问题

  • 我请求一个aspx页上有个textbox控件,text属性是空值。

    我在IE上更改textbox值为1  这个时候,页面中的控件状态值应该是空值。

    回发数据给服务器,页面生命周期的“加载”环节,应该是把textbox.text属性用控件状态还原成空值,但经过测试,text属性值是不会被还原成控件状态的中的值的,这是为什么。

    MSDN中不是说 加载环节中(也就是page_load事件),会用控件状态还原控件属性的吗??????为什么这里没有把textbox1.text还原成空值。

    越搞越晕了。

    2010年6月30日 1:30

答案

  • 在你回发的时候,控件的值会被保存在ViewState里的。然后再Page_Load,这个时候值已经被保存了,它还原的是保存后的值。
    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年7月1日 0:47
    版主
  • 你好,

    因为Textbox继承了IPostbackDataHandler这个接口,其中有个方法:

    protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
      base.ValidateEvent(postDataKey);
      string text = this.Text;
      string str2 = postCollection[postDataKey];
      if (!this.ReadOnly && !text.Equals(str2, StringComparison.Ordinal))
      {
        this.Text = str2;
        return true;
      }
      return false;
    }
    
     
    
     
    你post回服务器端的值保存在NameValueCollection中,它会比较两者之间的值,如果不等于,它会设置textobx的text,并返回一个true用于是否可以触发textchanged事件。
    Microsoft Online Community Support
    2010年7月1日 7:13

全部回复

  • 在你回发的时候,控件的值会被保存在ViewState里的。然后再Page_Load,这个时候值已经被保存了,它还原的是保存后的值。
    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年7月1日 0:47
    版主
  • 是回发前就将更改后的值 保存在hidefield这个里面了吗?  然后再回发数据给服务器的吗?

    我可以创建一个自定义服务器控件,当前IE上理性服务器控件的值后,回发时将这个控件的值也回发给服务器,我该通过什么类的什么方法来实现这个功能。
    2010年7月1日 2:38
  • 你好,

    因为Textbox继承了IPostbackDataHandler这个接口,其中有个方法:

    protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
      base.ValidateEvent(postDataKey);
      string text = this.Text;
      string str2 = postCollection[postDataKey];
      if (!this.ReadOnly && !text.Equals(str2, StringComparison.Ordinal))
      {
        this.Text = str2;
        return true;
      }
      return false;
    }
    
     
    
     
    你post回服务器端的值保存在NameValueCollection中,它会比较两者之间的值,如果不等于,它会设置textobx的text,并返回一个true用于是否可以触发textchanged事件。
    Microsoft Online Community Support
    2010年7月1日 7:13
  • MSDN中的生存周期讲的不是很详细,有些东西很难理解。。。。。。。。还好有这个论坛和这么多的高手。。。。。要不永远都搞不明白了。

    2010年7月1日 8:50