用模型字段绑定<input type =“radio”/>?

时间:2014-11-11 23:40:47

标签: c# .net asp.net-mvc asp.net-mvc-4 razor-2

在一个视图中,我有两个<input type="radio">,他们组合成一个广播组。

我想用一个Model字段绑定它们,如果value为true,它应该绑定第一个单选按钮,如果为false,它应该绑定另一个。

请指导如何实现。我尝试了下面的代码,但它总是检查第二个无线电,无论模型有什么价值。

<div class="radiobuttons">
  <input type="radio" name="LenderType" checked="@Model.Filter_Value" id="rbtnAllLenders" class="cb">
  <input type="radio" id="rbtnMajorLendersOnly" checked="!@Model.Filter_Value" name="LenderType" class="cb">
</div>

3 个答案:

答案 0 :(得分:1)

输入为无线电的输入需要设置值。如果选中了收音机,那么该值就是为模型中的名称发送的值。

查看模型

public class SomeViewModel
{
 public int MyRadioValue { get; set; }
}

输入元素

<input type="radio" value=1 name="MyRadioValue" />
<input type="radio" value=2 name="MyRadioValue" />
<input type="radio" value=3 name="MyRadioValue" />

答案 1 :(得分:0)

您的手动代码是将selected属性添加到两个单选按钮。以下所有内容均相同:

<input type="radio" ... checked />
<input type="radio" ... checked="selected" />
<input type="radio" ... checked="true" />
<input type="radio" ... checked="false" />

请注意,最后2个是checked属性的无效值,但仍然会检查单选按钮。由于您有一个组名,并且只能在视觉上检查一个按钮,因此选择了最后一个。 Refer W3C specifications

使用html帮助器绑定到您的模型。如果模型包含属性string LenderType,那么

@Html.RadioButtonFor(m => m.LenderType, "All lenders", new { id = "All"})<label for="All">All lenders</label>
@Html.RadioButtonFor(m => m.LenderType, "Major lenders", new { id = "Major"})<label for="Major">Major lenders</label>

如果LenderType的值是&#34;所有贷方&#34;将选择第一个选项。如果值为&#34;主要贷方&#34;,则将选择第二个选项

答案 2 :(得分:0)

创建Html Helper ....

 public static HtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectListItems, RadioButtonListLayout layout)
        {
            var sb = new StringBuilder();

            foreach (var item in selectListItems)
            {
                var itemId = string.Format(
                    CultureInfo.InvariantCulture,
                    "{0}_{1}",
                    helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)),
                    item.Value);

                var itemHtml = string.Format(
                    CultureInfo.InvariantCulture,
                    "{0} <label for=\"{1}\">{2}</label>",
                    helper.RadioButtonFor(expression, item.Value, new { id = itemId }),
                    itemId,
                    item.Text);

                if (layout == RadioButtonListLayout.Horizontal)
                {
                    sb.Append("<span class=\"radiobuttonlist-horizontal\">");
                    sb.Append(itemHtml);
                    sb.AppendLine("</span>");
                }
                else
                {
                    sb.Append("<div class=\"radiobuttonlist-vertical\">");
                    sb.Append(itemHtml);
                    sb.AppendLine("</div>");
                }
            }

            return new HtmlString(sb.ToString());
        }

使用它......

@Html.RadioButtonListFor(x=>x.Id,Model.ListItem,RadioButtonListLayout.Horizontal)