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 .将被解释为类名选择器)。 在你的情况下,对于集合中的第一个项, namename="[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()方法。