15

在 ASP.NET MVC 应用程序中,我有两个单选按钮。根据模型中的布尔值,如何启用或禁用单选按钮?(单选按钮的值也是模型的一部分)

我的单选按钮目前看起来像这样 -

            @Html.RadioButtonFor(m => m.WantIt, "false")  
            @Html.RadioButtonFor(m => m.WantIt, "true")  

在模型中,我有一个名为model.Alive. 如果model.Alivetrue我想启用单选按钮,否则如果model.Alivefalse,我想禁用单选按钮。谢谢!

4

3 回答 3

41

您可以像这样直接将值作为 htmlAttributes 传递:

@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"})  
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"})

如果您需要检查 model.Alive 那么您可以执行以下操作:

@{
   var htmlAttributes = new Dictionary<string, object>();
   if (Model.Alive)
   {
      htmlAttributes.Add("disabled", "disabled");
   }
}

Test 1 @Html.RadioButton("Name", "value", false, htmlAttributes)
Test 2 @Html.RadioButton("Name", "value2", false, htmlAttributes)

希望有帮助

于 2013-02-11T16:16:38.257 回答
6

我的答案与艾哈迈德的相同。唯一的问题是,WantIt 属性不会在提交时发送,因为由于禁用了 html 属性,它会被忽略。解决方案是在 RadioButtonFors 上方添加一个 HiddenFor,如下所示:

@Html.HiddenFor(m => m.WantIt)
@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"})  
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"})

这样所有的值都被渲染了,你在提交时得到了布尔值。

于 2017-05-03T12:56:13.767 回答
0

或者为 RadioButtonFor 提供重载?

public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, bool isDisabled, object htmlAttributes)
    {
        var linkAttributes = System.Web.Mvc.HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
        Dictionary<string, object> htmlAttributesDictionary = new Dictionary<string, object>();
        foreach (var a in linkAttributes)
        {
            if (a.Key.ToLower() != "disabled")
            {
                htmlAttributesDictionary.Add(a.Key, a.Value);
            }

        }

        if (isDisabled)
        {
            htmlAttributesDictionary.Add("disabled", "disabled");
        }

        return InputExtensions.RadioButtonFor<TModel, TProperty>(htmlHelper, expression, value, htmlAttributesDictionary);
    }
于 2015-04-30T16:28:54.963 回答