我有一个问题,可能是因为我不了解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是一个空集合(这没有意义,因为它还保存了应该保持的表单数据)。
我感谢任何帮助。
答案 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