【发布时间】:2015-07-28 21:25:54
【问题描述】:
我正在做一个组件来格式化列表,它是一个扩展,我写了以下代码,但是,在执行时,它给了我错误:
无法将 lambda 表达式转换为类型 'System.Web.WebPages.HelperResult' 因为它不是委托类型
这是扩展名:
public static MvcHtmlString FormatMyList<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, IEnumerable<TValue> list,
Expression<Func<TValue, System.Web.WebPages.HelperResult>> formatExp = null)
{
foreach (var item in list)
{
var itemFormated = formatExp.Compile().Invoke(item).ToString();
}
return new MvcHtmlString("");
}
查看调用:
var test = Html.FormatMyList<ModelType, ListType>(list, formatExp:
x =>
@<text>
This is format of @x.Cambio to test @x.Fala
</text>);
我已经尝试从 HelperResult 更改为 dynamic,但也没有用。
我不想像 StackOverFlow 的一些帖子中建议的那样只使用Func<object, HelperResult>,因为<text></text> 内会有项目需要强类型为 ListType 的项目。
在我的视图中格式可能不同,所以我不能使用模板来 ListType。
有没有办法做到这一点,即使不使用表达式?
谢谢
【问题讨论】:
-
您将
FormatMyList()标记为扩展方法,但您没有在任何对象上调用它。相反,您将其用作静态方法,这意味着您缺少其中一个参数。 -
你传递
formatExp不是Expression而是Func。 -
它是HtmlHelper的一个扩展,在这段代码中可以看到:Htm.FormatMyList。在这种情况下,Html 是一个 HtmlHelper。
-
将
formatExp的签名更改为Func<TValue, System.Web.WebPages.HelperResult>
标签: c# asp.net-mvc asp.net-mvc-4 razor