为什么ASP.NET RadioButton和复选框在SPAN中呈现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我会期待这一点:

<asp:CheckBox    ID="CheckBox1"    runat="server" CssClass="myClass" />
<asp:RadioButton ID="RadioButton1" runat="server" CssClass="myClass" />
<asp:TextBox     ID="TextBox1"     runat="server" CssClass="myClass" />

...像这样渲染(为简单起见删除了一些属性)

<input id="CheckBox1"    type="checkbox" class="myClass" />
<input id="RadioButton1" type="radio"    class="myClass" />
<input id="TextBox1"     type="text"     class="myClass" /> 

...实际上,RadioButton并且CheckBoxspan标签包装并且CSS类在那里被应用。

<span class="myClass"><input id="CheckBox1"    type="checkbox" /></span> 
<span class="myClass"><input id="RadioButton1" type="radio"    /></span> 
<input type="text" id="TextBox1" class="myClass" /> 

有没有这个原因,有没有办法避免它?它使得jQuery选择器变得丑陋,因为你无法捕捉到所有这些:

$("input.myClass")

授予它只是要:

$("input.myClass, span.myClass input")

...但这很丑陋。我可以编写自己的选择器,但又不像应该那样高雅。

提问于
用户回答回答于

System.Web.UI.WebControls名称空间中的Web控件可能在不同的浏览器中呈现不同的效果。你不能指望它们始终呈现相同的元素。他们可能会添加任何他们认为需要使其在特定浏览器中工作的内容。

如果你想控制如何将控件呈现为html,则应该使用System.Web.UI.HtmlControls名称空间中的控件。那是:

<input type="checkbox" id="CheckBox1" runat="server" class="myClass" />
<input type="radio" name="RadioButton1" runat="server" class="myClass" />
<input type="text" id="TextBox1" runat="server" class="myClass" />

它们将像相应的html元素一样呈现,而不会添加额外的元素。这当然意味着您必须为浏览器的兼容性承担责任,因为控件没有。另外,这些控件并不具有WebControls名称空间中控件的所有功能。

用户回答回答于

我找到inputAttributes属性。

例如,下面是如何直接在复选框控件上添加一个类,而没有跨度:

myCheckBoxControl.InputAttributes.Add("class", "myCheckBoxClass")

扫码关注云+社区