ASP.NET MVC禁用具有Razor语法的单选按钮

时间:2013-02-11 15:57:29

标签: asp.net-mvc razor

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

我的收音机按钮目前看起来像这样 -

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

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

3 个答案:

答案 0 :(得分:32)

您可以直接将值传递为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)

希望有所帮助

答案 1 :(得分:3)

我的答案与艾哈迈德的答案相同。唯一的问题是,由于禁用了html属性,因为它被忽略,所以不会在提交时发送WantI属性。解决方案是在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"})

这样就可以呈现所有值,并在提交时返回布尔值。

答案 2 :(得分: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);
    }