ASP.NET MVC是/否具有强绑定模型MVC的单选按钮

bri*_*wey 129 c# asp.net-mvc boolean model radio-button

有谁知道如何将是/否单选按钮绑定到ASP.NET MVC中强类型模型的布尔属性.

模型

public class MyClass
{
     public bool Blah { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图

<%@  Page Title="blah"  Inherits="MyClass"%>
    <dd>
        <%= Html.RadioButton("blah", Model.blah) %> Yes
        <%= Html.RadioButton("blah", Model.blah) %> No
    </dd>
Run Code Online (Sandbox Code Playgroud)

谢谢

解:

感谢Brian的指导,但这与他写的相反.如此 -

<%@  Page Title="blah"  Inherits="MyClass"%>
<dd>
    <%= Html.RadioButton("blah", !Model.blah) %> Yes
    <%= Html.RadioButton("blah", Model.blah) %> No
</dd>
Run Code Online (Sandbox Code Playgroud)

Ben*_*ull 194

如果您使用的是MVC 3和Razor,您还可以使用以下内容:

@Html.RadioButtonFor(model => model.blah, true) Yes
@Html.RadioButtonFor(model => model.blah, false) No
Run Code Online (Sandbox Code Playgroud)


Bri*_*ins 74

第二个参数被选中,所以使用!当布尔值为false时选择无值.

<%= Html.RadioButton("blah", !Model.blah) %> Yes 
<%= Html.RadioButton("blah", Model.blah) %> No 
Run Code Online (Sandbox Code Playgroud)


Dan*_*mms 53

以下是一个更完整的示例,其中使用了fieldset可访问性原因并将第一个按钮指定为默认值.如果没有a fieldset,单选按钮的整体功能无法以编程方式确定.

模型

public class MyModel
{
    public bool IsMarried { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图

<fieldset>
    <legend>Married</legend>

    @Html.RadioButtonFor(e => e.IsMarried, true, new { id = "married-true" })
    @Html.Label("married-true", "Yes")

    @Html.RadioButtonFor(e => e.IsMarried, false, new { id = "married-false" })
    @Html.Label("married-false", "No")
</fieldset>
Run Code Online (Sandbox Code Playgroud)

您可以@checked向匿名对象添加参数以将单选按钮设置为默认值:

new { id = "married-true", @checked = 'checked' }
Run Code Online (Sandbox Code Playgroud)

请注意,您可以通过更换绑定到一个字符串true,并false以字符串值.


ctc*_*ctc 26

稍微关闭Ben的回答,我添加了ID的属性,所以我可以使用标签.

<%: Html.Label("isBlahYes", "Yes")%><%= Html.RadioButtonFor(model => model.blah, true, new { @id = "isBlahYes" })%>
<%: Html.Label("isBlahNo", "No")%><%= Html.RadioButtonFor(model => model.blah, false, new { @id = "isBlahNo" })%>
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.

  • 通常标签位于单选按钮之后. (7认同)
  • 在单选按钮周围放置标签是完全有效的. (4认同)

Jef*_*ish 23

使用常规HTML在单选按钮周围添加标签标签也可以修复"labelfor"问题:

<label><%= Html.RadioButton("blah", !Model.blah) %> Yes</label>
<label><%= Html.RadioButton("blah", Model.blah) %> No</label>
Run Code Online (Sandbox Code Playgroud)

现在单击文本可选择相应的单选按钮.


Sta*_*ams 8

或MVC 2.0:

<%= Html.RadioButtonFor(model => model.blah, true) %> Yes
<%= Html.RadioButtonFor(model => model.blah, false) %> No
Run Code Online (Sandbox Code Playgroud)


Kyl*_*Mit 5

如果我可以把帽子扔进戒指,我认为有一种比现有答案更清洁的方式来重复使用单选按钮功能.

假设您的ViewModel中包含以下属性:

Public Class ViewModel
    <Display(Name:="Do you like Cats?")>
    Public Property LikesCats As Boolean
End Class
Run Code Online (Sandbox Code Playgroud)

您可以通过可重用的编辑器模板公开该属性:

首先,创建文件 Views/Shared/EditorTemplates/YesNoRadio.vbhtml

然后将以下代码添加到YesNoRadio.vbhtml:

@ModelType Boolean?

<fieldset>
    <legend>
        @Html.LabelFor(Function(model) model)
    </legend>

    <label>
        @Html.RadioButtonFor(Function(model) model, True) Yes
    </label>
    <label>
        @Html.RadioButtonFor(Function(model) model, False) No
    </label>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

您可以通过在视图中手动指定模板名称来调用属性的编辑器:

@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")
Run Code Online (Sandbox Code Playgroud)

优点:

  • 在HTML编辑器中编写HTML而不是在代码中追加字符串.
  • 保留DisplayName DataAnnotation
  • 允许单击Label以切换单选按钮
  • 保持形式最少的代码(1行).如果出现错误的方式出现问题,请使用模板进行处理.