清除动态UserControl容器

时间:2012-04-02 21:10:03

标签: c# asp.net

如何将_dynamicMaterials设为空或清除视图状态?

当用户点击提交时,我想重置容器,以便所有文本框都为空。

我有什么想法可以解决这个问题吗?

    private materials[] _dynamicMaterials; // Container for dynamically added UserControl "materials.ascx"

    protected void Page_PreInit(object sender, EventArgs e)
    {
        GetPostBackControl(Page);
    }


    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (!this.DesignMode)
        {
            int count = MySession.Current.UserControlCount;
            _dynamicMaterials = new materials[count];

            for (int i = 0; i < count; i += 1)
            {
                Control newcont = LoadControl("materials.ascx");
                newcont.ID = "materialControl" + i.ToString();
                myPlaceHolder1.Controls.Add(newcont);
                _dynamicMaterials[i] = (materials)newcont;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您是否需要跟踪该容器的ViewState,但假设您没有最简单的解决方案,那就是在容器上将EnableViewState设置为false:

<asp:Panel ID="pnlContent" runat="server" EnableViewState="false">
    <!-- your controls here -->
</asp:Panel>

如果您确实需要ViewState,并且只想在提交时将其清除,则可以像其他人在评论中建议的那样致电ViewState.Clear()

最后,您还可以在提交时以编程方式清除字段:

pnlContent.Controls.OfType<TextBox>().ToList().ForEach(t => t.Text = string.Empty);