如何根据条件将禁用添加到 html 助手?

How to add disabled to html helper based on condition?

我试图阻止用户在某些情况下使用输入但是如果我向它添加 disabled 将其禁用,无论它的值为 truefalse.

这是我的代码:

@Html.TextBoxFor(model => model.inputName, new { @disabled = (condition ? "true" : "false") })

在任何情况下它都会被禁用。

因为是否禁用取决于你的disabled属性而不是disabled属性值

这是一个例子

<p>Last name: <input type="text" name="lname" disabled="" /></p>
<p>Last name: <input type="text" name="lname" disabled="true" /></p>
<p>Last name: <input type="text" name="lname" disabled="false" /></p>

如果你不想用Js来控制你的属性,我们可以通过if条件判断为true来创建disabled的元素,否则不会。

@if(condition) 
{
    Html.TextBoxFor(model => model.inputName, new { @disabled = "true" })
}
else
{
    Html.TextBoxFor(model => model.inputName)
}

否则我们可以为此创建一个扩展方法。

public static class TextBoxForExtensions
{
    public static IHtmlString TextBoxFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> expression, 
        object htmlAttributes, 
        bool disabled
    )
    {
        var attributes = new RouteValueDictionary(htmlAttributes);
        if (disabled)
        {
            attributes["disabled"] = "disabled";
        }
        return htmlHelper.TextBoxFor(expression, attributes);
    }
}

那我们就可以用like

@Html.TextBoxFor(model => model.inputName, new{},condition)

正如我在对这个问题的评论中所说,您可以添加变量:

var myAttributes = condition ? new {@disabled = true, /* add some more here*/} : new {/*add more here*/}

然后你可以将它添加到你的助手中:

@Html.TextBoxFor(model => model.inputName, myAttributes)