为啥我的隐藏输入元素上的“名称”属性与我设置的不同?

Posted

技术标签:

【中文标题】为啥我的隐藏输入元素上的“名称”属性与我设置的不同?【英文标题】:Why does the 'name' attribute on my hidden input element change from what I set it to be?为什么我的隐藏输入元素上的“名称”属性与我设置的不同? 【发布时间】:2013-08-19 08:50:05 【问题描述】:

这是我的标记:

<input type="hidden" runat="server" name="block" id="FSC_show_sidebar_button" value="0" />
<input type="hidden" runat="server" name="block" id="FSC_hide_sidebar_button" value="1" />

这是呈现页面并且我检查它时的样子:

<input name="ctl00$MainContent$FSC_show_sidebar_button" id="ctl00_MainContent_FSC_show_sidebar_button" type="hidden" value="0"/>
<input name="ctl00$MainContent$FSC_hide_sidebar_button" id="ctl00_MainContent_FSC_hide_sidebar_button" type="hidden" value="1"/>

有没有办法防止“名称”属性发生变化? (不是这个ID我不管这个有没有变化)

【问题讨论】:

【参考方案1】:

由于runat="server" 属性,这成为服务器端控件。这会将您的母版页、控制信息添加到您的输入元素中。

【讨论】:

真遗憾,我希望我能找到一种方法使其成为静态而不删除服务器端访问。好的,谢谢大家。【参考方案2】:

这是 ASP.Net 用于将您设置的 ID 属性转换为客户端 ID 的命名约定。您可以通过设置ClientIDMode 属性来修改此行为。默认情况下,这设置为“可预测”,这意味着:

ClientID 值是通过将父命名容器的 ClientID 值与控件的 ID 值连接起来生成的。

要使 ASP.Net 完全按照您指定的方式使用 ID,请设置 ClientIDMode=Static。你可以设置这个globally in web.config:

<system.web>
    <pages clientIdMode="Static" ... />
</system.web>

或在页面(或单个控件)级别:

<%@ Page ClientIDMode="Static" ... %>

【讨论】:

谢谢,在发布这篇文章几秒钟后,我用不同的词进行了研究,发现了这个:***.com/questions/5792290/… ...但是当 12 分钟时间结束时,我会将你的答案标记为答案。 实际上,我问的是 NAME 而不是 ID 字段...名称仍然会随着添加而改变。 @taybriz 哦...问题是,ASP.Net 管道使用namehtml 重构服务器状态。也许这无法改变...... @taybriz 我认为@dumass 是对的——你必须要么删除runat=server 使其成为客户端控件,要么接受名称的修改。【参考方案3】:

这是因为您的元素位于母版页内,母版页通过容器命名来唯一标识控件。

MainContent 是您的内容占位符的名称。

为避免此名称混乱,您需要使用 ASP.NET 4.0 ClientIDMode 属性。

阅读Control.ClientIDMode Property 了解有关ClientIDMode 属性的更多信息。

【讨论】:

我问的是 NAME 而不是 ID 字段...名称仍然会随着添加而改变。

以上是关于为啥我的隐藏输入元素上的“名称”属性与我设置的不同?的主要内容,如果未能解决你的问题,请参考以下文章

第10章 表单元素(中)

隐藏域是干啥东东 有啥作用 为啥有的网页上经常用到 如何使用

为啥我的最后一个 <li> 元素会以 overflow: hidden; 隐藏?

如果我的用户与我的 AspNetCore webapp 上的所需角色相关联,为啥我会被禁止?

为啥我要选择与我的指标不同的损失函数?

为啥表单标签会与我的 ngModel 和属性绑定混淆? ngModel 在 ngFor 里面 Form 标签