带RadioButtonFor的ID

时间:2018-08-27 11:40:23

标签: c# asp.net-mvc razor asp.net-mvc-5 mvc-editor-templates

我正在尝试处理ASP MVC 5中的单选按钮ID

我正在这样工作

示例模型

class A
{
   public bool? radio { get; set; }
}

并在剃刀视图中

@Html.RadioButtonFor(x => x.NeutroBT, Model.NeutroBT, new { @id = "True"})
@Html.RadioButtonFor(x => x.NeutroBT, !Model.NeutroBT, new { @id = "False})

这不会造成问题,但是我正在使用一个编辑器模板,并且我希望它已生成id,以便通过诸如@Html.IdFor(x => x.NeutroBT, true)@Html.IdFor(x => x.NeutroBT, false)之类的方式进行访问其他观点,只是防止将来发生变化

像这样可能吗?我花了很多时间进行搜索,但没有得到类似的结果

如果不可能,最好的处理方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

无需使用id属性。相反,您可以只使用name属性通过javascript选择或设置值(在任何情况下,@Html.IdFor() will only ever return NeutroBT , not the id that you override in the RadioButtonFor()`方法无法用于您的情况)

此外,RadioButtonFor()的第二个参数应为truefalse(而不是Model.NeutroBT!Model.NeutroBT)。

要使标签与按钮相关联,您可以将其包装在<label>中,例如

<label>
    @Html.RadioButtonFor(x => x.NeutroBT, true, new { id = ""})
    <span>Yes</span>
</label>
<label>
    @Html.RadioButtonFor(x => x.NeutroBT, false, new { id = ""})
    <span>No</span>
</label>

请注意,new { id = "" }会删除id属性,并防止由于重复的id属性而导致无效的html。

然后使用jQuery访问所选值

var selectedValue = $('input[name="' + @Html.NameFor(x => x.NeutroBT) + '"]:checked').val();