C# 序列化并重新加载动态控件
我理解“为什么”控件在回发时消失,到目前为止,我只需在page init中动态创建我需要做的事情,就取得了巨大的成功。然而,当我不得不根据现有dropdownlist的值向asp.net页面添加一些控件时,这对我来说就彻底失败了 所以我的问题很简单,我似乎找不到一个好的工作代码示例。我需要根据dropdownlist的值向页面添加一些控件。然后在其他回发中持久化这些添加的控件(会话很好) 下面是一个要处理的片段:C# 序列化并重新加载动态控件,c#,asp.net,dynamic,user-controls,postback,C#,Asp.net,Dynamic,User Controls,Postback,我理解“为什么”控件在回发时消失,到目前为止,我只需在page init中动态创建我需要做的事情,就取得了巨大的成功。然而,当我不得不根据现有dropdownlist的值向asp.net页面添加一些控件时,这对我来说就彻底失败了 所以我的问题很简单,我似乎找不到一个好的工作代码示例。我需要根据dropdownlist的值向页面添加一些控件。然后在其他回发中持久化这些添加的控件(会话很好) 下面是一个要处理的片段: protected void Page_Init(System.Objec
protected void Page_Init(System.Object sender, System.EventArgs e)
{
RebuildPlaceholder();
}
protected void ddlGroup_Change(System.Object sender, System.EventArgs e)
{
ExampleDataContext ctxExample = new ExampleDataContext();
var aryExample = (from rslt in ctxExample.mvExample
where rslt.label.ToLower() == ddlGroup.SelectedValue
select rslt);
foreach (var objExample in aryExample)
{
TextBox txtCreated = new TextBox();
txtCreated.ID = "ddl" + objExample.ID;
plcExample.Controls.Add(txtCreated);
}
StorePlaceholder();
}
private void StorePlaceholder()
{
//Need code to store all controls in a placeholder.
}
private void RebuildPlaceholder()
{
//Need code to rebuild all of the controls from Session.
}
我找到了这篇相关的文章:但是我正在努力学习序列化所有控件的语法,等等
这可以限制为页面上已经存在的单个占位符的子控件,我只需要存储/恢复该占位符的控件
任何版本的ASP.NET都可以,如果在4.0中有什么东西使它变得简单的话。请尝试缓存下拉列表选择。然后在下一页加载期间,使用缓存设置所选的值。然后根据该选择加载新控件
Session["CacheKey"] = DropDownList1.SelectedValue;
然后访问会话缓存:
var value = Session["CacheKey"];
看看这篇微软的文章
我发现DropDownList.SelectedValue在Page.Init期间不可用。但是您仍然可以通过
请求[ddl.UniqueID]
访问该值,然后创建并添加所有动态控件
这感觉有点像黑客攻击,但是ASP.NET页面生命周期不允许有很多替代方案,特别是当控件不可序列化时