【问题标题】:ClientIDMode in CheckBox复选框中的 ClientIDMode
【发布时间】:2014-08-12 12:16:39
【问题描述】:

asp:CheckBox控件中的ClientIDMode属性有什么用?我为此找到了 AutoID, Inherit, Predictable, and Static 的值。

我主要是在寻找它是如何在 HTML 中呈现的?谁能解释一下属性和值?

【问题讨论】:

    标签: asp.net checkbox


    【解决方案1】:

    这是 MS 如何计算 .net 控件名称本身的 ID。 MSDN

    由于 ASP.net 页面放在服务器上并发送到客户端 MS 将根据可变数量的条件命名 id,它们是否在母版页中,它们是否在用户控制器中,中继器, 等等。

    既然你不能有重复的 id,你如何处理一个放在中继器内的 .net 控件?你需要有一个命名算法。有些人愚蠢地使用渲染的ID(ct100_*)而不是使用getElementID通过javascript来操作元素。我不知道他们为什么公开这些算法,而不是仅仅说一切都将是 1 算法。也许有人知道他们为什么要公开不同的算法。

    【讨论】:

      【解决方案2】:

      id 生成示例:

      网络表单:

      <script runat="server">
          protected void Page_Load(object sender, EventArgs e)
          {
              lstMain.DataSource = new string[] { "a", "b" };
              lstMain.DataBind();
          }
      </script>
      
      <asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
          <asp:ListView ID="lstMain" runat="server">
              <ItemTemplate>
                  <asp:CheckBox ID="chkFour" runat="server" ClientIDMode="AutoID" />
                  <asp:CheckBox ID="chkFive" runat="server" ClientIDMode="Predictable" />
                  <asp:CheckBox ID="chkSix" runat="server" ClientIDMode="Static" />
              </ItemTemplate>
          </asp:ListView>
      </asp:Content>
      

      结果:

              <input id="ctl00_ContentPlaceHolder1_lstMain_ctrl0_chkFour" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl0$chkFour" />
              <input id="ctl00_ContentPlaceHolder1_lstMain_ctrl0_chkFive_0" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl0$chkFive" />
              <input id="chkSix" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl0$chkSix" />
      
              <input id="ctl00_ContentPlaceHolder1_lstMain_ctrl1_chkFour" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl1$chkFour" />
              <input id="ctl00_ContentPlaceHolder1_lstMain_ctrl1_chkFive_1" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl1$chkFive" />
              <input id="chkSix" type="checkbox" name="ctl00$ContentPlaceHolder1$lstMain$ctrl1$chkSix" />
      

      将 id 传递给 JS:

      <script type="text/javascript">
          var autoId = '<%=someControl.ClientID%>';
          var predictableId = '<%=someControl.ClientID%>';
          var staticId = 'someControl';
      </script>
      

      【讨论】:

      • 我们可以为该属性分配其他值而不是 ClientIDMode 值吗? Eg: ClientIDMode="xyz"
      • 是否覆盖了现有的id 值?没有呈现为单独的属性?
      • 不,您只能使用 .NET 4 中的现有值。是的,它会覆盖 id 属性。通常我将静态用于更简单的 JS 代码。您必须每次都编写 以获得其他模式的真实 ID。
      • 实际上,我想在网格中对一些复选框进行分组...为此,我只寻找一些属性来分配 GroupID...更好,我想我可以使用tooltip 属性
      • 您可以创建自定义 HTML 5 数据属性。看到这个答案:stackoverflow.com/a/10706882/991267
      猜你喜欢
      • 2014-02-25
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多