asp.net - 如何从自定义扩展中调用 DisplayFor
问题描述
我正在尝试编写一些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”的定义,并且找不到接受“HtmlHelper”类型的第一个参数的扩展方法“DisplayFor(...)”(您是否缺少 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(...)
在我的扩展程序中使用该方法?
解决方案
您需要更改要包含的方法的签名<TModel>
才能使用这些***For()
方法。
public static MvcHtmlString MakeTableBodyTd<TModel>(this HtmlHelper<TModel> html, ModelMetadata metaData)
{
....
}
推荐阅读
- javascript - 图像路径在 React 中不起作用,因为我尝试在对象内部使用图像路径,该对象也在数组内部
- sql-server - 如何在 UPDATE 语句中设置变量,然后在 xml.modify() 语句中使用该变量?
- sql - 后退 | SQL | 仅当子网是给定 ip 列表的一部分时才获取一行
- ruby-on-rails-6 - Rails 6 Mina 部署在预编译时失败
- python - 使用 rpy2 将 python 数据框字符列转换为 r
- bootstrap-4 - Bootstrap:如何在不定义每个屏幕尺寸的情况下始终占用 6 列
- css - 链接按钮 onClick 在 React 中不起作用,css 将按钮更改为链接?
- arrays - 如何合并和删除这个数组
- node.js - 如何在启动时运行某个文件夹中的所有 node.js 文件?
- json - 从 ArcGis 数据库中抓取不返回数据?