在asp.net中,如果使用自定义属性,通常会按原样呈现。
考虑到这个标记(注意:在所有示例中都删除了属性,如id
、name
和for
,因为它们生成的id/名称都很详细):
<asp:TextBox runat="server" data-foo="bar" />
在asp.net中呈现为:
<input type="text" data-foo="bar" />
也就是说,asp.net使data-foo
保持不变。
复选框通常如下所示:
<asp:CheckBox runat="server" Text="Normal" />
呈现为:
<input type="checkbox" />
<label>Normal</label>
但如果您在复选框上添加自定义属性:
<asp:CheckBox runat="server" Text="Custom attribute" data-foo="bar" />
它呈现为:
<span data-foo="bar">
<input type="checkbox" />
<label>Custom attribute</label>
</span>
正如您所看到的,呈现了一个跨度来保存属性。如果您在后台代码中添加该属性,也会发生这种情况。这不会发生在任何其他HtmlControl,AFAIK。
有没有人知道为什么要呈现这个span来保存该属性?
有没有在input标签中呈现属性的方法?
发布于 2012-05-23 01:18:25
我不确定为什么它是用跨度呈现的,但我想您可以直接将该属性添加到CheckBox
的input
元素中-behid如下所示:
myCheckBox.InputAttributes.Add(...)
参考链接:
更新
还使用了一个额外的父元素,以便应用于CheckBox
的属性可以同时影响input
和文本。我认为它是一个span
(而不是div
),因为它是一个内联元素,这使得它更便于在不同的场景中使用。
参考链接:
发布于 2012-05-23 01:14:51
这是渲染引擎构建CheckBox
控件的方式,对此没有太多可做的。
您可以做的事情是创建一个runat="server"
输入。
<input id="myInput" runat="server" type="checkbox" data-foo="bar"/>
<label>Custom attribute</label>
另一种选择是在加载文档时使用jquery添加data-foo
属性
$(function(){
$('span[data-foo]').each(function(){
var $span = $(this);
var value = $span.data('foo');
$span.find('input').data('foo',value);
});
})
发布于 2013-03-28 23:50:06
只需添加另一个方法,当所有其他方法都失败时,您可以始终使用文本控件,并使其呈现您想要的任何内容。在处理回发时,您需要做更多的工作,但有时这是获取所需html的唯一方法。
标记:
<asp:Literal ID="myLiteral" runat="server"/>
代码旁:
myLiteral.Text = string.Format("<input type=\"checkbox\" data-foo=\"{0}\" /><label>Normal</label>", value)
https://stackoverflow.com/questions/10706714
复制相似问题