ASP.NET MVC HtmlHelper - 如何在没有值的情况下编写属性?

时间:2013-04-15 20:12:26

标签: asp.net-mvc-4 html-helper

我希望能够在没有值的情况下编写属性,例如autofocus。现在,我可以这样做:

@Html.TextBoxFor(m => m.UserName, new { autofocus = true })

但当然这写道:

<input id="UserName" type="text" value="" name="UserName" autofocus="True">

有没有办法在没有值的情况下写入属性?

2 个答案:

答案 0 :(得分:1)

评论者alok_dida是正确的。

使用:

@Html.TextBoxFor(m => m.UserName, new { autofocus = "" })

答案 1 :(得分:0)

这是实现您想要的简单方法。请注意,这可以很容易地适用于多个属性,变量属性等。

public static class HtmlHelperExtensions
{
    private static readonly FieldInfo MvcStringValueField = 
                    typeof (MvcHtmlString).GetField("_value",
                            BindingFlags.Instance | BindingFlags.NonPublic);

    public static MvcHtmlString TextBoxAutoFocusFor<TModel, TProperty>(
                            this HtmlHelper<TModel> htmlHelper, 
                            Expression<Func<TModel, TProperty>> expression, 
                            object htmlAttributes = null)
    {
       if(htmlAttributes == null) htmlAttributes  = new { }

       var inputHtmlString =htmlHelper.TextBoxFor(expression, htmlAttributes);

       string inputHtml = (string) MvcStringValueField.GetValue(inputHtmlString);

       var newInputHtml = inputHtml.TrimEnd('>') + " autofocus >";

       return MvcHtmlString.Create(newInputHtml);
    }
}

用法示例

@Html.TextBoxAutoFocusFor(m => m.UserName)

@Html.TextBoxAutoFocusFor(m => m.UserName, new { data-val-foo="bob"  })

我确信有人会提到反射很慢,但是如果读取该字符串的性能对你很重要。我怀疑你是否会使用html助手开始。