2011-10-05 68 views
2

我有一个问题,这可能是因为我不了解viewstate的工作方式。我有一些代码在setter中为我自定义控件中的属性设置了一个viewstate变量。ViewState不会在回发中保留自定义添加

public bool EditMode 
    { 
     get { return (bool)(ViewState["editMode" + this.ID] ?? false); } 
     set {ViewState["editMode" + this.ID] = value;} 
    } 

editmode正在按钮单击事件期间设置。

public void shippingButton_Click(object sender, EventArgs e) 
    { 
     if (((Button)sender).CommandName== "Edit") 
     { 
      ctrlShippingAddress.EditMode = true; 
     } 
     else 
     { 
      Page.Validate(); 
      if (Page.IsValid) 
      { 
       ctrlShippingAddress.SaveAddress(); 
       ctrlShippingAddress.EditMode = false; 
      } 
     } 
    } 

我已经尝试过手动的情况下,我没有加入这在页面周期正确的点的视图状态设置它在页面加载,但据我了解事件发生之前渲染。我也尝试添加ViewStateMode =“Enabled”到控件,然后到使用它的页面,然后到没有运气的母版页。

如果我在get/set的位置进行调试,我看到viewstate是一个空集合(这没有意义,因为它也保存了应该保留的表单数据)。

我很感激任何帮助。

+0

与同事在检查之后,我发现,这个问题是在web配置的页面节点 需要设置为true(显然) –

+0

您应该重新发布此评论作为答案,然后接受它,所以如果有人在将来发现此问题,他们也会发现一个明确标记回答。 – Jeff

回答

0

与同事在检查之后,我发现,这个问题是在web.config

的网页节点
<pages enableViewState="false"> 

需要设置为true

0

您不需要将控件ID附加到ViewState项。我假设你是为了唯一性而做的,但没有必要。

上面可能会解决你的问题,但如果不尝试这样的事情,而不是:

public bool EditMode 
{ 
    get 
    { 
     bool editMode = false; 
     if (ViewState["editMode"] != null) 
      editMode = (bool)ViewState["editMode"]; 
     return editMode; 
    } 
    set 
    { 
     ViewState["editMode"] = value; 
    } 
} 
相关问题