如何在MVC中扩展TextAreaFor

时间:2013-08-26 16:16:28

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 extension-methods

我知道如何扩展TextBoxFor:

public static MvcHtmlString TextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
        {
            MvcHtmlString html = default(MvcHtmlString);
            RouteValueDictionary routeValues = new RouteValueDictionary(htmlAttributes);         
            html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, routeValues);
            return html;
        }

我想对TextAreaFor执行相同的操作,但遗憾的是 System.Web.Mvc.Html.InputExtensions 不包含TextAreaFor方法。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

请参阅doc,它位于TextAreaExtensions静态类

return System.Web.Mvc.Html.TextAreaExtensions.TextAreaFor(htmlHelper, expression, routeValues);

或只是

return htmlHelper.TextAreaFor(expression, routeValues);

顺便说一句,第三个参数只是(如TextBoxFor中)IDictionary<string, Object> htmlAttributes,与RouteValues无关。

它正常工作,因为RouteValueDictionary实现了IDictionary<string, Object>,但你的论点令人困惑。

答案 1 :(得分:1)

如果您使用[System.ComponentModel.DataAnnotations.DataType(DataType.MultilineText)]标记您的媒体资源,然后使用EditorFor,那么您应该会得到想要的结果。

public class SomeClass
{
    [DataType(DataType.MultilineText)]
    public string Name { get; set; }
}

@Html.EditorFor(x => x.Name)