繁体   English   中英

ASP.NET:如何在viewstate中存储占位符?

[英]ASP.NET : How to store placeholder in viewstate?

我正在尝试开发一个页面。 有一个按钮和一个填孔器。 单击按钮后,用户控件将添加到占位符。

每次单击按钮时,应将许多用户控件添加到占位符。

我正在尝试在preinit事件上将占位符存储在viewstate中,但是在加载事件中从viewstate检索占位符时,viewstate仍然为null。

下面是我的代码:

  protected void PreInit(object sender, EventArgs e)
        {
            this.OnPreInit(e);
            if (!Page.IsPostBack)
            {
                ViewState["c"] = PlaceHolder1;

            }
            else { PlaceHolder1 = (PlaceHolder)ViewState["c"]; }
        }

 protected void Page_Load(object sender, EventArgs e)
        {

            if(IsPostBack)
        { PlaceHolder1=  (PlaceHolder)ViewState["c"]; }

        }


 public void addDepartmentBtn_Click(object sender, EventArgs e)
        {
            // User Control Code


            c1 = LoadControl("~/AddDepartment.ascx");
            PlaceHolder1.Controls.Add(c1);
}

如果viewstate在这种情况下不合适,那么实现此目的的替代方法是什么?

如果您试图将控件动态添加到页面,则必须在每次回发时在Init中完成 这意味着您必须将数据结构(ViewState中会持久执行的操作)用作动态创建的控件的列表-而不是控件本身,但是将字符串哈希用作ID的方法很常见。

每次用户执行某项操作以将控件添加到页面时,请向列表添加键。 然后,必须在Page Init中阅读列表并使用它来重新创建并将动态控件添加回页面集合中,否则它们将不会出现在页面上。

您必须在每个帖子背面将控件重新添加到占位符。

您尝试使用ViewState的做法是错误的树-ViewState的用途完全不同,即使您愿意,也只能将可序列化的内容存储到ViewState中。

这是行不通的。 ASP.NET服务器控件太复杂了,无法存储在ViewState中。 通过ASP.NET设计,服务器控件的作用是将其数据(状态,属性值等)存储在Page的ViewState中。

您可以做的是在ViewState中存储已创建并添加到占位符的AddDepartment用户控件的数量。 这可以在PreRender中完成。 然后在回发时,您从ViewState中读取此编号,并创建并添加到许多AddDepartment控制的占位符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM