Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化并重新加载动态控件_C#_Asp.net_Dynamic_User Controls_Postback - Fatal编程技术网

C# 序列化并重新加载动态控件

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

我理解“为什么”控件在回发时消失,到目前为止,我只需在page init中动态创建我需要做的事情,就取得了巨大的成功。然而,当我不得不根据现有dropdownlist的值向asp.net页面添加一些控件时,这对我来说就彻底失败了

所以我的问题很简单,我似乎找不到一个好的工作代码示例。我需要根据dropdownlist的值向页面添加一些控件。然后在其他回发中持久化这些添加的控件(会话很好)

下面是一个要处理的片段:

    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页面生命周期不允许有很多替代方案,特别是当控件不可序列化时