如何从自定义扩展内部调用 DisplayFor
How can I call DisplayFor from inside of a custom extension
我正在尝试编写一些 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' does not contain a definition for 'DisplayFor' and no
extension method 'DisplayFor(...)' accepting a first argument of type
'HtmlHelper' could be found (are you missing a using directive or an
assembly reference?
我可以毫无问题地在我的视图中使用 @Html.DisplayFor(...)
,但无法在扩展中使用 class。
我添加了对以下库的引用
using System.Web.Mvc;
using System.Web.Mvc.Html;
但还是报错
html只有以下方法可用html.Display()
、html.DisplayForModel()
、html.DisplayName()
、html.DisplayNameForModel()
和html.DisplayText()
如何在我的扩展中使用 html.DisplayFor(...)
方法?
您需要更改方法的签名以包含 <TModel>
才能使用 ***For()
方法。
public static MvcHtmlString MakeTableBodyTd<TModel>(this HtmlHelper<TModel> html, ModelMetadata metaData)
{
....
}
我正在尝试编写一些 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' does not contain a definition for 'DisplayFor' and no extension method 'DisplayFor(...)' accepting a first argument of type 'HtmlHelper' could be found (are you missing a using directive or an assembly reference?
我可以毫无问题地在我的视图中使用 @Html.DisplayFor(...)
,但无法在扩展中使用 class。
我添加了对以下库的引用
using System.Web.Mvc;
using System.Web.Mvc.Html;
但还是报错
html只有以下方法可用html.Display()
、html.DisplayForModel()
、html.DisplayName()
、html.DisplayNameForModel()
和html.DisplayText()
如何在我的扩展中使用 html.DisplayFor(...)
方法?
您需要更改方法的签名以包含 <TModel>
才能使用 ***For()
方法。
public static MvcHtmlString MakeTableBodyTd<TModel>(this HtmlHelper<TModel> html, ModelMetadata metaData)
{
....
}