我正在使用Html助手创建一个复选框。在某些情况下,我想将disabled
属性添加到htmlAttribute对象中。我有以下代码:
@if (Model.IsAuthorized)
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class" })
}
else
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class", @disabled = "disabled" })
}
我想让这段代码更简洁。有没有办法在一行中有条件地添加某些html属性/没有块条件?
答案 0 :(得分:7)
虽然你可以使用
@Html.CheckBoxFor(m => m.Property, Model.IsAuthorized ? (object)new { @class = "input-class", disabled = "disabled" } : (object)new { @class = "input-class"});
在一行代码中执行此操作,在您的情况下,可能会导致模型绑定失败。
CheckBoxFor()
方法生成2个输入,带value="True"
的复选框和带value="False"
的隐藏输入。如果Property
的初始值为true
且IsAuthorized
为true
,则结果是该复选框已停用且不会发布值。但是,隐藏的输入将被提交并绑定到您的模型,导致Property
为false
(当它应为true
时)
为了正确处理模型绑定,您需要if
块
@if (Model.IsAuthorized)
{
@Html.CheckBoxFor(x => m.Property, new { @class = "input-class" })
}
else
{
@Html.HiddenFor(m => m.Property) // necessary to post back the initial value
<input type="checkbox" @(Model.Property ? "checked" : null) disabled />
}
答案 1 :(得分:0)
尝试以下代码:
@{
var attr = new { @class = "input-class" };
if (Model.IsAuthorized)
{
attr = new { @class = "input-class", @disabled = "disabled" };
}
}
@Html.CheckBoxFor(x => @Model.Property, attr)