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