MVC RadiobuttonFor剃刀如何使标签上单击能?

问题描述 投票:4回答:2

我试图在剃刀语法单选按钮列表到目前为止,我想出这个

@foreach (var p in Model)
{
    <div id="projectList" class="col-lg-5">
        @Html.RadioButton("name", "1", false, new { onCLick = "ShowOption(this)", id = p.id.ToString() })
        @Html.Label(p.id.ToString(), p.name)
    </div>
}   

但标签未与单选按钮关联。

c# razor asp.net-mvc-5 html-helper
2个回答
1
投票

foreach回路不产生for属性的标签(如果你从new { id = p.id.ToString() }方法去除RadioButton,没有id属性将被添加或者尽管它是默认行为,这样做。

不添加属性的原因,当你的模型是IEnumerable<T>是符合HTML-4标准,其中指出

ID标记必须以字母开头([A-ZA-Z])

HtmlHelpers基于所述id属性的属性name但以下划线替换和[].字符以防止与jQuery选择冲突(例如.id属性将被解释为一个类名称选择器)。在你的情况name是集合中的第一项name="[0].Name",但因为这将意味着产生id="_0__Name"(在HTML-4无效),在HtmlHelper只是省略了id(并在labelfor属性的情况下。

解决这方面的一个简单的方法是只包装在<label>元件的单选按钮

<label>
    @Html.RadioButton("name", "1", false)
    <span>@p.name</span>
</label>

另一种选择是在生成的id属性RadioButton()并且还生成在标签的匹配for属性

@Html.RadioButton("name", "1", false, new { onclick = "ShowOption(this)", id = p.id })
@Html.Label(p.name, new { @for = p.id})

附注:我建议你使用强类型qazxsw POI和POI qazxsw方法。


0
投票

寻找这一行@ Html.Label( “一些标签”,htmlAttributes:新{的onclick = “ShowOption(” someID “);” ID = “someID”})

RadioButtonFor()
© www.soinside.com 2019 - 2024. All rights reserved.