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值replacetrue
和false
来绑定到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")