我希望能够在没有值的情况下编写属性,例如autofocus
。现在,我可以这样做:
@Html.TextBoxFor(m => m.UserName, new { autofocus = true })
但当然这写道:
<input id="UserName" type="text" value="" name="UserName" autofocus="True">
有没有办法在没有值的情况下写入属性?
答案 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助手开始。