与HTML帮助有条件的HTML属性与HTML帮助有条件的HTML属性(Conditional htm

2019-05-12 12:53发布

我使用的是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属性没有条件块?

Answer 1:

虽然你可以使用

@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" 。 在初始值的情况下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 />
}


文章来源: Conditional html attribute with Html Helper