【问题标题】:Is there a way to maintain ASP.NET ViewState in dynamically rendered HTML control?有没有办法在动态呈现的 HTML 控件中维护 ASP.NET ViewState?
【发布时间】:2010-09-21 20:21:36
【问题描述】:

我想制作自定义控件,其中包含几个 <input type='checkbox' /> 控件,我在 Render 方法中呈现这些控件。 是否可以在这些控件上保留 ViewState(例如是否选中)?

有一种方法可以通过使用 ASP.NET 服务器 CheckBox 控件来实现, 使用 this.Controls.Add() 将它们添加到 OnLoad 事件中, 每次都给他们相同的ID, 但我不想这样做:)

【问题讨论】:

    标签: asp.net html render


    【解决方案1】:

    如果您希望 ViewState 恢复为动态控件,则必须在加载事件之前重新创建该控件。这意味着将该代码放入 Init 处理程序中。

    【讨论】:

    • 我应该如何在 Load 事件之前重新创建一个 HTML 控件?
    【解决方案2】:

    当您创建控件时,请确保将它们添加到页面中首先,然后在它们上设置任何属性。这是因为,为了让 ViewState 管理器考虑对控件进行管理,它必须检测到更改,并且只有在将控件添加到 Controls 集合后才能检测到更改。

    设置明确的 ID 也很重要。保存和恢复 ViewState 时,控件 ID 必须匹配。

    还要确保在page lifecycle 的正确时刻 (OnInit) 创建控件。

    【讨论】:

      【解决方案3】:

      您可以直接访问 ViewState:

      bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
      if (checked) {
          write("<input ... >");
      }
      else {
          write("<input ... >");
      }
      

      要保存用户的值,您可以在 PostBack 中执行以下操作:

      ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";
      

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多