我正在尝试编写一些HtmlHelper
扩展名以清理我的视图。我需要使用Html.DisplayFor()
来渲染我的模型。我写了以下扩展名
public static MvcHtmlString MakeTableBodyTd(this HtmlHelper html, ModelMetadata metaData)
{
var td = new TagBuilder("td");
if (metaData != null)
{
var cssClassName = metaData.AdditionalValues.GetValueOrDefault("TextAlignment", "left");
td.AddCssClass(cssClassName);
var t = html.DisplayFor(x => metaData.Model, metaData.DataTypeName, new { Metadata = metaData }).ToHtmlString();
td.InnerHtml = t;
}
return new MvcHtmlString(td.ToString());
}
但是,此扩展程序给了我这个错误
“ HtmlHelper”不包含“ DisplayFor”的定义,并且没有 扩展方法'DisplayFor(...)'接受类型的第一个参数 可以找到“ HtmlHelper”(您是否缺少using指令或 组装参考?
我可以在视图中毫无问题地使用@Html.DisplayFor(...)
,但无法在扩展类中使用。
我添加了对以下库的引用
using System.Web.Mvc;
using System.Web.Mvc.Html;
但是仍然给我错误。
html仅具有以下可用的方法html.Display()
,html.DisplayForModel()
,html.DisplayName()
,html.DisplayNameForModel()
和html.DisplayText()
如何在扩展程序中使用html.DisplayFor(...)
方法?
答案 0 :(得分:3)
您需要将方法的签名更改为包括<TModel>
才能使用***For()
方法。
public static MvcHtmlString MakeTableBodyTd<TModel>(this HtmlHelper<TModel> html, ModelMetadata metaData)
{
....
}