对于视图,我要生成一些复选框.
我有一个项目集合:
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
或者其他一些东西都没用.
你无法避免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)