ASP.NET MVC是/否强烈绑定模型MVC的单选button

有谁知道如何将一个是/否单选button绑定到ASP.NET MVC中强types模型的布尔属性。

模型

public class MyClass { public bool Blah { get; set; } } 

视图

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

谢谢

解:

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

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

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

 <%= Html.RadioButton("blah", !Model.blah) %> Yes <%= Html.RadioButton("blah", Model.blah) %> No 

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

 @Html.RadioButtonFor(model => model.blah, true) Yes @Html.RadioButtonFor(model => model.blah, false) No 

下面是一个更完整的示例,使用fieldset来实现可访问性,并将第一个button指定为默认值。 没有fieldset ,单选button作为一个整体不能以编程方式确定。

模型

 public class MyModel { public bool IsMarried { get; set; } } 

视图

 <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> 

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

 new { id = "married-true", @checked = 'checked' } 

请注意,您可以通过用string值replacetruefalse来绑定到string。

在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" })%> 

我希望这有帮助。

在单选button周围添加标签标签可以解决'labelfor'问题:

 <label><%= Html.RadioButton("blah", !Model.blah) %> Yes</label> <label><%= Html.RadioButton("blah", Model.blah) %> No</label> 

现在点击文本select适当的单选button。

或MVC 2.0:

 <%= Html.RadioButtonFor(model => model.blah, true) %> Yes <%= Html.RadioButtonFor(model => model.blah, false) %> No 

如果我可以把我的帽子扔进戒指,我认为比现有的重用单选buttonfunction的答案更清晰。

假设您在ViewModel中有以下属性:

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

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

首先创buildViews/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> 

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

 @Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio") 

优点:

  • 开始在HTML编辑器中编写HTML,而不是在后面的代码中添加string。
  • 保留DisplayName DataAnnotation
  • 允许点击标签切换单选button
  • 尽可能less的代码在窗体中维护(1行)。 如果出现问题的方式出现问题,请使用模板。

(1)我可以一次生成标签和收音机,(2)所以我不必大惊小怪指定我自己的ID:

 public static class HtmlHelperExtensions { public static MvcHtmlString RadioButtonAndLabelFor<TModel, TProperty>(this HtmlHelper<TModel> self, Expression<Func<TModel, TProperty>> expression, bool value, string labelText) { // Retrieve the qualified model identifier string name = ExpressionHelper.GetExpressionText(expression); string fullName = self.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); // Generate the base ID TagBuilder tagBuilder = new TagBuilder("input"); tagBuilder.GenerateId(fullName); string idAttr = tagBuilder.Attributes["id"]; // Create an ID specific to the boolean direction idAttr = String.Format("{0}_{1}", idAttr, value); // Create the individual HTML elements, using the generated ID MvcHtmlString radioButton = self.RadioButtonFor(expression, value, new { id = idAttr }); MvcHtmlString label = self.Label(idAttr, labelText); return new MvcHtmlString(radioButton.ToHtmlString() + label.ToHtmlString()); } } 

用法:

 @Html.RadioButtonAndLabelFor(m => m.IsMarried, true, "Yes, I am married")