2012-05-22 62 views
18

在asp.net中,如果使用自定义属性,通常它会按原样呈现。Asp.net复选框和html数据属性

考虑到这个标记(注:属性,如idnamefor在所有的例子作为自己生成的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" /> 

呈现为:

<asp:CheckBox runat="server" Text="Custom attribute" data-foo="bar" /> 

它呈现为:

<input type="checkbox" /> 
<label>Normal</label> 

但是,如果你在一个复选框添加自定义属性:

<span data-foo="bar"> 
    <input type="checkbox" /> 
    <label>Custom attribute</label> 
</span> 

正如您所看到的,呈现的跨度用于保存属性。如果您在后面的代码中添加属性,也会发生这种情况。这与任何其他HtmlControl,AFAIK都不会发生。

有谁知道为什么这个范围被渲染来保存属性?

无论如何要呈现输入标签中的属性?

+0

有趣..只是好奇,你有什么用额外的属性为\ –

回答

20

我不知道为什么它有一个跨度呈现添加data-foo属性,但我想你可以直接添加属性到inputCheckBox的元素代码behid这样的:

myCheckBox.InputAttributes.Add(...) 

再ference链接:

更新

一个额外的父元素被使用,让您应用到CheckBox属性可以影响input和文字。我想这是一个span(而不是div),因为它是一个内联元素,使它在不同场景中使用更方便。

参考链接:

+0

不错,我以前从来没有注意到这个InputAttributes。我尝试了Attributes.Add,这不起作用。 – Andre

4

这是渲染引擎建立控制的方式,对此没有太多要做。

你可以做的是创建一个runat="server"输入。

<input id="myInput" runat="server" type="checkbox" data-foo="bar"/> 
<label>Custom attribute</label> 

另一种选择是使用jQuery在文档加载

$(function(){ 
    $('span[data-foo]').each(function(){ 
     var $span = $(this); 
     var value = $span.data('foo'); 
     $span.find('input').data('foo',value);   
    }); 
}) 
1

我想补充的是我用的时候一切都失败了另一种方法,你可以随时使用文字控制并使其呈现不管你想。您在处理回发时需要做更多的工作,但有时这是获取所需html的唯一方法。

标记:

<asp:Literal ID="myLiteral" runat="server"/> 

Codebeside:

myLiteral.Text = string.Format("<input type=\"checkbox\" data-foo=\"{0}\" /><label>Normal</label>", value)