【问题标题】:How to use ClientIDMode in ASP.NET 4如何在 ASP.NET 4 中使用 ClientIDMode
【发布时间】:2011-11-06 16:25:36
【问题描述】:

页面的 ClientIDMode 的默认值为 AutoID。默认 控件的 ClientIDMode 值为 Inherit。如果不设置 ClientIDMode 用于页面或页面上的任何控件,所有控件 将使用 AutoID 算法。

这是来自 msdn。 但是当我在 ASP.NET 4 甚至 3.5 中创建 Web 应用程序时,控件的所有 id 都是我为它们编写的。它们不是由 autoId 算法生成的。然后我尝试手动将 clientIDMode="AutoID" 添加到控件中,它也没有达到我的预期。那么问题是什么?有什么规则可以让它可用吗?

提前致谢,

已编辑

这是在 .aspx 页面中

<div>
    <asp:Panel ID="Panel1" runat="server">
        <asp:Panel ID="Panel2" runat="server">
            <asp:Panel ID="Panel3" runat="server">
                <asp:Panel ID="Panel4" runat="server">
                    (:
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </asp:Panel>
</div>

这是输出:

<div id="Panel1">
        <div id="Panel2">

                <div id="Panel3">

                    <div id="Panel4">
                        (:
                </div>

        </div>

    </div>
</div>

【问题讨论】:

    标签: asp.net clientid


    【解决方案1】:

    您的所有身份都以现在的方式出现的原因是 .NET 框架没有理由更改它们。

    如果您将 Panel 放置在 Repeater 控件中,那么它们都会发生变化,以避免出现多个同名 ID。

    示例(不正确的标记):

    <asp:Repeater id="repeater1" runat="server">
      <template>
          <asp:Panel id="Panel1" runat="server">
              <asp:Panel id="Panel2" runat="server">
    
              </asp:Panel>
          </asp:Panel>
      </template>
    </asp:Repeater>
    

    由此生成的 HTML 将显示面板 ID 已更改为从包含控件继承。类似repeater1_ct100_Panel1

    当您使用母版页、内容持有者和数据绑定控件时,也会发生同样的情况。 .NET 更新 ID 以避免多个 ID 同名。

    【讨论】:

      【解决方案2】:

      如果将一个控件嵌套到另一个控件中,可以清楚地看到不同 ClientIDMode 值之间的差异; AutoId 模式在每个父命名容器之后命名控件,而 Static 模式启动一个新的命名层次结构。 Predictable 模式主要用于数据绑定控件,而 Inherit 模式使控件使用其父级的 ClientIDMode。

      【讨论】:

      • 我想我正在使用嵌套控件。
      • 您的控件是嵌套的,但在您的情况下,无需更改 ID。
      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2013-05-26
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多