ViewState不会通过回发持久保留自定义添加内容

时间:2011-10-05 17:59:40

标签: asp.net c#-4.0

我有一个问题,可能是因为我不了解viewstate的工作方式。我有一些代码在setter中为我所做的自定义控件中的属性设置了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;
            }
        }
    }

我尝试在页面加载时手动设置它,以防我没有在页面循环中的正确点将其添加到viewstate,但据我所知,事件发生在渲染之前。我也尝试将ViewStateMode =“Enabled”添加到控件,然后添加到使用它的页面,然后添加到母版页,没有运气。

如果我在get / set点调试,我发现viewstate是一个空集合(这没有意义,因为它还保存了应该保持的表单数据)。

我感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您无需将控件ID附加到ViewState键。我假设你是为了独特而做的,但没有必要。

以上内容可能会解决您的问题,但如果不尝试这样的话:

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

答案 1 :(得分:0)

在与同事一起审核之后,我发现问题出现在web.config的页面节点中

<pages enableViewState="false"> 

需要设置为true