【问题标题】:Serialize and Reload Dynamic Controls序列化和重新加载动态控件
【发布时间】:2011-10-12 22:39:13
【问题描述】:

我知道“为什么”控件在回发时消失了,到目前为止,我已经取得了巨大的成功,只是在页面初始化中动态创建了我需要做的事情。然而,当我不得不根据现有下拉列表的值向 asp.net 页面添加一些控件时,这对我来说就崩溃了。

所以我的问题很简单,我似乎无法找到一个好的工作代码示例。我需要根据下拉列表的值向页面添加一些控件。然后在其他回发中保留这些添加的控件(会话很好)。

这是一个可以使用的sn-p:

    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.
    }

我找到了这篇相关文章:Dynamically Adding Controls,但我正在为序列化所有控件等的语法而苦苦挣扎。

这可以限制为页面上已经存在的单个占位符的子控件,只是存储/恢复该占位符的控件是我所追求的。

任何版本的 ASP.NET 都可以,如果在 4.0 中有什么可以让这变得简单的话。

【问题讨论】:

    标签: c# asp.net dynamic user-controls postback


    【解决方案1】:

    而是尝试缓存下拉列表选择。然后在下一个页面加载期间使用缓存来设置选择的值。然后根据该选择加载新控件。

    Session["CacheKey"] = DropDownList1.SelectedValue;
    

    然后访问Session Cache:

    var value = Session["CacheKey"];
    

    看看这篇微软文章 on ASP.NET Caching

    【讨论】:

      【解决方案2】:

      我发现 DropDownList.SelectedValue 在 Page.Init 期间不可用。但是您仍然可以使用Request[ddl.UniqueID] 访问该值,然后创建并添加所有动态控件。

      感觉有点像 hack,但是 ASP.NET 页面生命周期不允许有很多选择,尤其是当您的控件不可序列化时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多