MVC RadiobuttonFor Razor如何使标签点击?
到目前为止,我正试图用剃刀语法创建一个radiobuttonlist,我已经想出了这个
@foreach (var p in Model) { @Html.RadioButton("name", "1", false, new { onCLick = "ShowOption(this)", id = p.id.ToString() }) @Html.Label(p.id.ToString(), p.name) }
但标签与radiobutton无关。
您的foreach
循环不会for
标签的属性生成(如果您从RadioButton
方法中删除了new { id = p.id.ToString() }
,则不会添加任何id
属性,尽管它是默认行为。
当您的模型是IEnumerable
时未添加属性的原因是符合HTML-4标准,该标准声明
ID令牌必须以字母开头([A-Za-z])
HtmlHelpers
根据name
属性生成id
属性,但是替换和[
, ]
和.
带有下划线的字符,以防止与jQuery
选择器发生冲突(例如, id
属性中的a .
将被解释为类名选择器)。 在你的情况下,对于集合中的第一个项, name
是name="[0].Name"
,但因为这意味着生成id="_0__Name"
(在HTML-4中无效), HtmlHelper
只是省略了id
(和在label
的情况下, for
属性。
解决此问题的一种简单方法是将单选按钮包装在元素中
另一种选择是在RadioButton()
生成id
属性,并在标签中生成属性匹配
@Html.RadioButton("name", "1", false, new { onclick = "ShowOption(this)", id = p.id }) @Html.Label(p.name, new { @for = p.id})
旁注:我建议你使用LabelFor()
类型的RadioButtonFor()
和LabelFor()
方法。