我创建了一个带有样本详细信息的复合控件,如下所示。基本上,第一次在页面加载时控件设置一个视图状态变量,问题是在回发后(单击按钮时),ViewState变量为null。我已经进行了广泛的研究,但我无法找到解决方案。我检查了所有Microsoft推荐的文章以及其他开发人员。这种方法似乎适用于每个人,我无法弄清楚我做错了什么。如果有人可以提供帮助,我会非常感激。
PS:此代码可能无法正常工作,因为它仅用于说明目的。但这正是我在我的代码中所做的。
Public class Test : CompositeControl
{
private Button btnTest = new Button();
public string TestViewState
{
get
{
string s = (string)ViewState["test"];
return (s == null) ? String.Empty : s;
}
set
{
ViewState["test"] = value;
}
}
private void set()
{
TestViewState = "test";
}
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
set();
}
protected override void RecreateChildControls()
{
EnsureChildControls();
}
protected override void CreateChildControls()
{
base.Controls.Clear();
btnTest.ID = "btnTest";
btnTest.Click += new EventHandler(btnSubmitTest_Click);
if (!ChildControlsCreated)
Controls.Add(btnTest);
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter writer)
{
btnSumbit.Render(writer);
}
protected void btnSubmitTest_Click(object sender, EventArgs e)
{
string test = TestViewState; // Viewstate value is null here!!!!!!
}
}
答案 0 :(得分:0)
你确定Page_Load被调用了吗?据我所知,“符号”仅适用于页面和用户控件(没有检查)。尝试覆盖:
protected override void OnLoad(EventArgs e)
{
...
}
使用调试器进行测试。
答案 1 :(得分:0)
好的,另一个团队成员在web.config级别禁用了enableviewstate。很高兴我发现了它。感谢Arthur确认它对您有用。