7

对于视图,我必须生成一些复选框。

我有一个项目集合:

public class ItemSelection
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public Boolean IsSelected { get; set; }
        public Boolean IsActive { get; set; }
    }

在视图中,我正在对此进行迭代

@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)
}

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

new {disabled=item.IsActive?"ONE_SPECIAL_VALUE_HERE":"disabled"}

我试图把false,或其他一些东西,没有任何效果。

4

1 回答 1

8

你无法避免if

问题在于属性的特殊性,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)
于 2012-05-01T07:11:15.570 回答