C# ViewState[";sample";]变量在复合控件中回发时不保留值
我创建了一个复合控件,其示例详细信息如下。基本上,控件第一次在页面加载时设置了一个视图状态变量,问题是在返回时(单击按钮时),视图状态变量为空。我已经进行了广泛的研究,但我无法找到解决方案。我查阅了所有微软推荐的文章,也查阅了其他开发者的文章。这种方法似乎对每个人都有效,我不知道我做错了什么。如果有人能帮忙,我会非常感激 PS:此代码可能无法工作,因为它仅用于说明目的。但这正是我在代码中所做的C# ViewState[";sample";]变量在复合控件中回发时不保留值,c#,asp.net,controls,composite,C#,Asp.net,Controls,Composite,我创建了一个复合控件,其示例详细信息如下。基本上,控件第一次在页面加载时设置了一个视图状态变量,问题是在返回时(单击按钮时),视图状态变量为空。我已经进行了广泛的研究,但我无法找到解决方案。我查阅了所有微软推荐的文章,也查阅了其他开发者的文章。这种方法似乎对每个人都有效,我不知道我做错了什么。如果有人能帮忙,我会非常感激 PS:此代码可能无法工作,因为它仅用于说明目的。但这正是我在代码中所做的 Public class Test : CompositeControl { private
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!!!!!!
}
}
你确定页面加载被调用了吗?据我所知,“符号”只适用于页面和用户控件(没有检查)。尝试覆盖:
protected override void OnLoad(EventArgs e)
{
...
}
使用调试器测试它。好的,另一个团队成员在web.config级别禁用了enableviewstate。很高兴我找到了它。感谢Arthur确认它对您有效。我忘了提到此控件是从另一个复合控件调用的。。可能是子控件数据未保存在viewstate中。是,正在调用它。实际上,页面加载是从该控件所在的页面调用的。我把它放在这里是为了展示。我还验证了page_load也在控件内工作。。我错误地说这个自定义控件是另一个控件的子控件。事实上,这是直接从aspx页面使用的。我已经用ASP.NET网站测试了您的代码。尚未调用页面加载,已调用OnLoad(…)。当将set()移动到OnLoad(…)时,一切正常,当我尝试使用此代码时,它似乎工作正常,即使是页面加载(在实际页面中)…因此,它一定是我实际控制的某个东西。。。我会进一步调查的。谢谢你的检查。哦,这些“好”虫子之一;-)