在ASP.NET MVC应用程序中,我有两个单选按钮。根据模型中的布尔值,如何启用或禁用单选按钮? (单选按钮的值也是模型的一部分)
我的收音机按钮目前看起来像这样 -
@Html.RadioButtonFor(m => m.WantIt, "false")
@Html.RadioButtonFor(m => m.WantIt, "true")
在模型中,我有一个名为model.Alive
的属性。如果model.Alive
为true
,我想启用单选按钮,否则如果model.Alive
为false
,我想禁用单选按钮。
谢谢!
答案 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);
}