2012-05-22 61 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)