HTML Helper如何使用IEnumerable

时间:2018-10-25 20:41:51

标签: asp.net-mvc linq html-helper

我想创建一个自定义HTML Helper,可以在其中传递LINQ表达式作为参数,例如:

@Html.GetBackgroundColor(model => model.RiskAssessment)

我想用它在MVC视图中显示一些自定义的CSS,具体取决于RiskAssessment属性是什么。

所以我创建了一个像这样的辅助方法:

    public static string GetBackgroundColor<T, TResult>(this HtmlHelper<T> htmlHelper, Expression<Func<T, TResult>> expression)
    {
        ...
    }

但是,它将无法编译,错误是IEnumerable不包含“ RiskAssessment”的定义 所以我将方法更改为

 public static string GetBackgroundColor<T, TResult>(this HtmlHelper<IEnumerable<T>> htmlHelper, Expression<Func<T, TResult>> expression)
{
    ...
}

它可以编译,所以现在我大概已经拥有了集合中的所有对象,但是我不知道如何获取想要的对象,因为我不能使用IEnumerable上的表达式,没有Where()方法可用。我以为我可以做这样的事情:

IEnumerable<T> collection = htmlHelper.ViewData.Model;
T obj = collection.Where(expression)

但是我只是不知道我在做什么错。

1 个答案:

答案 0 :(得分:0)

弄清楚了,简单的错误。表标题行是使用@Html.DisplayNameFor(model => modelType)设置的,而我试图使用这些参数来调用自定义HTML帮助器。我应该一直在使用@Html.GetBackgroundColor(modelItem => item.RiskAssessment)在每个表行上调用该方法,这是可行的,因为我可以在方法中使用htmlHelper.ValueFor(expression)来获取属性值。 就是说,我不知道如何将标题行生成为Html.DisplayNameFor使用与我的自定义方法相同的方法签名,但是Intellisense报告说其中一种Expression类型是未知的。但这对我来说不是问题。 谢谢。