【发布时间】:2018-10-25 20:41:51
【问题描述】:
我想创建一个自定义 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)
但我只是不知道我在这里做错了什么。
【问题讨论】:
-
你想让
GetBackgroundColor渲染什么? -
RiskAssessment的类型是什么?以何种方式应用 CSS 设置,您能否举例说明预期结果? -
我正在使用 MVC 生成的脚本在 MVC 视图中显示 EntityFramework 表。我想根据行显示的属性设置表格行的颜色。 RiskAssessment 属性只是一个布尔值,所以我想根据该属性是真还是假向表格行添加内联样式(即将背景设置为绿色或红色),我将从 HTML 帮助器返回样式方法,但我遇到的问题是我只是看不到如何在 HTML 辅助方法中获取模型属性。
-
想通了,简单的错误。表头行是用@Html.DisplayNameFor(model => modelType) 设置的,我试图用这些参数调用我的自定义 HTML 助手。我应该使用@Html.GetBackgroundColor(modelItem => item.RiskAssessment) 在每个表行上调用该方法,这是因为我可以在方法中使用 htmlHelper.ValueFor(expression) 来获取属性值。跨度>
标签: asp.net-mvc linq html-helper