@Html.TextBoxFor(m => m.UserName, new { title = "ABC" })
// 输出结果为
<input data-val="true" data-val-required="The User name field is required." id="UserName" name="UserName" title="ABC" type="text" value="" /> @Html.EditorFor(m => m.UserName, new { title = "ABC" })
// 输出结果为
<input class="text-box single-line" data-val="true" data-val-required="The User name field is required." id="UserName" name="UserName" type="text" value="" />
很显然,第一个例子可以输出title属性,但第二个例子没有输出title属性。
原因是第一个例子的第二个参数为htmlAttributes,第二个例子中第二个参数为additionalViewData。
解决方案:
将htmlAttributes作为additionalViewData中的一个参数使用。如下:
@Html.EditorFor(model => model.EmailAddress,
new { htmlAttributes = new { @class = "span4",
maxlength = ,
required = true,
placeholder = "Email Address",
title = "A valid email address is required (i.e. [email protected])" } })
public static IDictionary<string, object> MergeHtmlAttributes<TModel>(this HtmlHelper<TModel> htmlHelper, object htmlAttributes)
{
var attributes = htmlHelper.ViewData.ContainsKey("htmlAttributes")
? HtmlHelper.AnonymousObjectToHtmlAttributes(htmlHelper.ViewData["htmlAttributes"])
: new RouteValueDictionary(); if (htmlAttributes != null)
{
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes))
{
var key = property.Name.Replace('_', '-');
if (!attributes.ContainsKey(key))
{
attributes.Add(key, property.GetValue(htmlAttributes));
}
}
} return attributes;
}