为啥我的隐藏输入元素上的“名称”属性与我设置的不同?
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 管道使用name
从 html 重构服务器状态。也许这无法改变......
@taybriz 我认为@dumass 是对的——你必须要么删除runat=server
使其成为客户端控件,要么接受名称的修改。【参考方案3】:
这是因为您的元素位于母版页内,母版页通过容器命名来唯一标识控件。
MainContent
是您的内容占位符的名称。
为避免此名称混乱,您需要使用 ASP.NET 4.0 ClientIDMode
属性。
阅读Control.ClientIDMode Property 了解有关ClientIDMode
属性的更多信息。
【讨论】:
我问的是 NAME 而不是 ID 字段...名称仍然会随着添加而改变。以上是关于为啥我的隐藏输入元素上的“名称”属性与我设置的不同?的主要内容,如果未能解决你的问题,请参考以下文章
隐藏域是干啥东东 有啥作用 为啥有的网页上经常用到 如何使用
为啥我的最后一个 <li> 元素会以 overflow: hidden; 隐藏?