【问题标题】:why I don't see generated IDs for server side controls?为什么我看不到为服务器端控件生成的 ID?
【发布时间】:2010-10-19 16:58:18
【问题描述】:

我现在有点困惑。让我解释一下:

我看到人们谈论在 asp.net (3.5) 中向页面添加按钮或其他控件,当控件呈现时,它会更改该控件的 Id,例如。 Button1 变成 Button1_somethingsomething 阻止他们使用 jQuery,他们最终使用的是诸如 <%controlId.ClientId %>

之类的东西

所以我做了一个小测试

1. I added a button on the page:
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server"  Text="Button" />
<div>

2. Then I added a JavaScript and jQuery:
<script type="text/javascript">
                    $(document).ready(function() {
                    $("#Button1").click(function() {
                        alert("Hello world!");
                    });

                    });
                </script>

3. The generated html is this:
<div>
  <input type="submit" name="Button1" value="Button" id="Button1" />
<div>

现在,我没有看到 ASP.NET (asp.net 3.5) 更改了 ID。为什么我会看到不同的行为?

顺便说一句。当我按下按钮时,这确实有效!

谢谢。

【问题讨论】:

    标签: .net asp.net javascript jquery asp.net-3.5


    【解决方案1】:

    ASP.NET 仅在控件位于 Naming Container 内时更改 ID。这可能包括某些用户控件、母版页中的 ContentPlaceHolders 和重复控件(Repeater、GridView 等)

    【讨论】:

      【解决方案2】:

      您可能并不总是需要使用 YourControl.ClientID,但这是一种很好的做法,这样当您的控件最终进入容器时,您就不必返回并修复它。

      【讨论】:

        【解决方案3】:

        默认情况下,ASP.NET 不会更改 ID 名称,但在母版页的 ContentPlaceHolder 中使用它们时会更改它们。所以名称最终会变成类似于 ctl00_ContentPlaceHolderContent_Button1 的名称。在您的情况下,没有母版页,也没有进行任何更改。

        【讨论】:

          【解决方案4】:

          这是由于某些控件(例如用于母版页的 asp:content 控件)实现的 INamingContainer 接口。

          来自MSDN

          实现此功能的任何控件 接口创建一个新的命名空间 其中所有子控件 ID 属性 保证在一个范围内是唯一的 整个应用程序。标记 该接口提供的允许 动态的唯一命名 生成的服务器控制实例 在 Web 服务器控制内 支持数据绑定。这些控件 包括中继器、DataGrid、 数据列表,复选框列表, 更改密码、登录视图、菜单、 SiteMapNodeItem 和 RadioButtonList 控制。

          您的示例代码不使用任何这些控件。您不要将母版页与 ContentPlaceHolder 一起使用。您的 ID 不会因此而改变。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-06-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多