代码之家  ›  专栏  ›  技术社区  ›  AaronLS

如何忽略特定控件的上一个请求的viewstate?

  •  1
  • AaronLS  · 技术社区  · 14 年前

    我可以做一些像设置控件的id之类的事情,或者允许我有条件地阻止它们获取上一个请求的viewstate/postback数据吗?

    Edit2:FYI为每个控件生成表单特有的id非常有效,所以我想我可以消除对旧表单的无意义加载,直到程序员请求在他的postback处理程序中加载一个表单。但是正如我上面提到的,我发现在回发数据处理之后加载表单意味着数据丢失。尽管viewstate是通过Contorls.Add加载的,在页面生命周期中扮演追赶者的角色,但是回发数据似乎不是这样的!看来我每次都被打败了。

    4 回复  |  直到 14 年前
        1
  •  2
  •   womp    14 年前

    给控件不同的ID肯定会阻止ViewState被加载,这是一种方法。

    您还可以操纵 ViewStateMode 属性,将其设置为“禁用”。我不确定这是否会阻止它加载(它肯定会阻止他们保存viewstate),但您可以试试。

        2
  •  3
  •   Community CDub    7 年前

    如果按照控件的生命周期进行操作,就可以避免出现问题。基本上,每当您有一个呈现的控件时,最好确保在下一次回发时重新创建该控件,即使您不再需要它。回发的第一个目标应该是恢复以前的状态——只有这样才能对其进行更改。

    我在这个答案中描述得最好:

    Wrong state in Server Controls with same ID's when dynamically adding UserControl to UpdatePanel

        3
  •  1
  •   ChrisLively    14 年前

    更新

    我开始相信您在页面生命周期的错误点生成控件。你的流程是什么?

        4
  •  1
  •   Mrinal Saurabh    11 年前

    必须在pageload中生成回发时的动态控件:

        protected void Page_Load(object sender, EventArgs e)
        {
          --Generate Dynamic Controls--
        }
    

    你需要像这样做:

        protected override void OnInitComplete(EventArgs e)
        {
            base.OnInitComplete(e);
        }
    
        protected void OnInit()
        {
         --Generate Dynamic Controls--
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }