将HelperResult表达为列表

时间:2015-07-28 03:47:08

标签: c# asp.net-mvc asp.net-mvc-4 razor

我正在做一个组件来格式化一个列表,它是一个扩展,我写了下面的代码,但是,在执行时,它给了我错误:

  

无法将lambda表达式转换为type   ' 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更改为动态,但也没有工作。

我不想按照StackOverFlow中某些帖子的建议只使用Func<object, HelperResult>,因为<text></text>中会有一些项目,需要强类型为ListType。

我的观点中的格式可能有所不同,因此我无法将模板用于ListType。

有没有办法做到这一点,即使不使用表达式?

由于

1 个答案:

答案 0 :(得分:0)

我做了,而不是使用表达式Expression<Func<TValue, System.Web.WebPages.HelperResult>>,我只使用了一个Func:

Func<TValue, System.Web.WebPages.HelperResult>

查看:

var test = Html.FormatMyList<ModelType, ListType>(list, format:
        @<text>
                This is format of @item.Cambio to test @item.Fala
            </text>);

我使用&#34;项目&#34;用于访问LisType属性的键。

使用表达式的唯一原因是访问强类型的属性,因为我可以使用&#34;项目&#34;关键,我不再需要表达了。

对我而言,谢谢。