带有Html Helper的条件html属性

Fil*_*ton 3 c# asp.net-mvc html-helper razor

我正在使用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" })
}
Run Code Online (Sandbox Code Playgroud)

我想让这段代码更简洁.有没有办法在一行中有条件地添加某些html属性/没有块条件?

小智 8

虽然你可以使用

@Html.CheckBoxFor(m => m.Property, Model.IsAuthorized ? (object)new { @class = "input-class", disabled = "disabled" } : (object)new { @class = "input-class"});
Run Code Online (Sandbox Code Playgroud)

要在一行代码中执行此操作,在您的情况下,可能会导致模型绑定失败.

CheckBoxFor()方法生成2个输入,带复选框value="True"和隐藏输入value="False".在其中的初始值的情况下PropertytrueIsAuthorizedtrue其结果是,该复选框被禁用,并且将不会发布的值.然而,隐藏的输入将被提交并绑定到你的模型,从而Propertyfalse(当它应该是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 />
}
Run Code Online (Sandbox Code Playgroud)