如何使用html帮助程序进行条件检查,禁用...

J4N*_*J4N 7 html asp.net-mvc

对于视图,我要生成一些复选框.

我有一个项目集合:

public class ItemSelection
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public Boolean IsSelected { get; set; }
        public Boolean IsActive { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

在视图中,我正在迭代这个

@foreach(ItemSelection item in Model.Items){
   Html.CheckBoxFor(m=>item.IsSelected)//HERE I WOULD LIKE TO HAVE DISABLED properties if I've a IsActive=falsel
   Html.HiddenFor(m=>item.Id)
}
Run Code Online (Sandbox Code Playgroud)

现在我看到我可以做一个"if",我根据这个属性创建一个不同的HtmlAttribute数组,但有没有办法只创建一个数组

new {disabled=item.IsActive?"ONE_SPECIAL_VALUE_HERE":"disabled"}
Run Code Online (Sandbox Code Playgroud)

我试图把false或者其他一些东西都没用.

nem*_*esv 8

你无法避免if:

问题在于disabled属性的特殊性,因为没有"特殊"值可以使您的示例工作,因为:

"disabled"只是此属性的可能值.如果应启用输入,则只需完全省略该属性.

因此,您需要省略该属性以启用控件,但所有HTML帮助程序将序列化作为htmlattributes传入的匿名对象的所有属性.并且无法有条件地向匿名类型添加属性.

但是,如果启用/禁用情况有多个公共属性,并且您不想创建两个匿名类型,则可以将属性放在具有可选disabled属性的字典中,并将字典用作htmlAttributes:

var checkboxHtmlAttributes = new Dictionary<string, object>
                                {{"attibute1", "value1"}, 
                                {"attribute2", "value2"}};
if (!item.IsActive)
{
    checkboxHtmlAttributes.Add("disabled", "disabled");
}
@Html.CheckBoxFor(m=>item.IsSelected, checkboxHtmlAttributes)
Run Code Online (Sandbox Code Playgroud)