【问题标题】:ASP.NET : How to store placeholder in viewstate?ASP.NET:如何在视图状态中存储占位符?
【发布时间】:2012-11-29 04:02:03
【问题描述】:

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

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

我正在尝试在 preinit 事件的视图状态中存储占位符,但是在加载事件视图状态中从视图状态中检索占位符时仍然为空。

下面是我的代码:

  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中是指占位符内的控件?
  • 标记中是否存在 PlaceHolder1 控件?
  • @ System Down:在第一个按钮单击时,我的用户控件位于占位符内。现在我想在视图状态中存储占位符。在接下来的后续按钮单击中,当新的用户控件添加到占位符时,应从视图状态中检索占位符。
  • @Igor:是的,它在标记中
  • 在 ViewState 中存储占位符不是一个好习惯。无论如何,您的要求是什么?

标签: c# asp.net viewstate


【解决方案1】:

您必须在每个回帖上为您的占位符重新添加控件。

您对 ViewState 的尝试是错误的树 - ViewState 是针对完全不同的东西,即使您愿意,您也只能将可序列化的东西存储到 ViewState 中。

【讨论】:

    【解决方案2】:

    如果您尝试动态地向页面添加控件,则必须在每次回发时在 Init 中完成。 这意味着您必须使用数据结构(在 ViewState 中持久化的东西会这样做)作为动态创建的控件列表——不是控件本身,而是用作 ID 的字符串哈希是一种常用方法。

    每次用户为页面添加控件时,都向列表中添加一个键。在 Page Init 中,您必须阅读列表并使用它来重新创建动态控件并将其添加回页面集合,否则它们将不会出现在页面上。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

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