ASP.net MVC3中TextBoxFor()的附加参数

时间:2012-02-27 11:28:54

标签: asp.net-mvc-3 razor

我使用文本框执行以下操作:

<input style="width:50px;" type="text" id="blah" value="@model.value1" @if(model.id!=1){ <text>disabled</text>}/>

这基本上显示了在特定情况下被禁用的文本框。 我决定用更“友好的mvc”方式取代它。

@Html.TextBoxFor(m => model.value1, new { id = "blah" })

但不确定如何添加禁用属性(动态)我可以通过在disabled=true中添加new{}值来静态地执行此操作。

我确实试过用这个: @if (<condition>) { var disable = true; } @Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = disable })

但这也行不通。我在这里采取了正确的方法吗?

2 个答案:

答案 0 :(得分:3)

@{
    var attributes = new Dictionary<string, object>
    {
        { "id", "blah" }
    };
    if (<condition>) 
    { 
        attributes["disabled"] = "disabled";
    }
}
@Html.TextBoxFor(m => model.value1, attributes)

显然,这很丑陋,你甚至不应该考虑污染你的观点。我只想编写一个自定义的可重用HTML帮助器:

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

        return htmlHelper.TextBoxFor(ex, attributes);
    }
}

您可以在视图中使用简单如下:

@Html.MyTextBoxFor(m => model.value1, new { id = "blah" }, <condition>)

答案 1 :(得分:2)

你有一个范围问题,上面的禁用在if语句的范围之外不存在,

我的建议如下:

@Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) })

编辑:

您可以使用

   @Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) ? "disabled" : "" })

如果你想插入禁用而不是bool这个词,那么从内存来看,这有点像浏览器特定设置,有些人对“真实”其他人“残疾”感到满意