Я хочу создать собственный помощник HTML, в котором я могу передать выражение LINQ в качестве параметра, например:
@Html.GetBackgroundColor(model => model.RiskAssessment)
Я хочу использовать его для отображения некоторых настраиваемых CSS в представлении MVC, в зависимости от свойства 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)
но я просто не знаю, что я здесь делаю не так.
Что это за тип RiskAssessment
? Каким образом применяются настройки CSS, можете ли вы привести пример ожидаемых результатов?
Я показываю таблицу EntityFramework в представлении MVC, используя сценарий, созданный MVC. Я хочу установить цвет строки таблицы в зависимости от свойства, отображаемого в этой строке. Свойство RiskAssessment - это просто bool, поэтому я хотел бы добавить встроенный стиль в строку таблицы в зависимости от того, является ли это свойство истинным или ложным (т.е. установить фон на зеленый или красный), и я бы вернул стиль из помощника HTML. метод, но проблема в том, что я просто не понимаю, как получить свойство модели во вспомогательном методе HTML.
Разобрался, простая ошибка. Строка заголовка таблицы настроена с помощью @ Html.DisplayNameFor (model => modelType), и я пытался вызвать свой пользовательский помощник HTML с этими параметрами. Мне следовало вызывать метод для каждой строки таблицы, используя @ Html.GetBackgroundColor (modelItem => item.RiskAssessment), и это работает, потому что я могу использовать htmlHelper.ValueFor (выражение) внутри метода для получения значения свойства.
Разобрался, простая ошибка. Строка заголовка таблицы настроена с помощью @Html.DisplayNameFor(model => modelType)
, и я пытался вызвать свой пользовательский помощник HTML с этими параметрами. Я должен был вызвать метод для каждой строки таблицы, используя @Html.GetBackgroundColor(modelItem => item.RiskAssessment)
, и это работает, потому что я могу использовать htmlHelper.ValueFor(expression)
внутри метода для получения значения свойства.
Тем не менее, я понятия не имею, как создается строка заголовка, поскольку Html.DisplayNameFor использует ту же сигнатуру метода, что и мой настраиваемый метод, но Intellisense сообщает, что один из типов выражения неизвестен. Но для меня это не проблема.
Спасибо.
Что вы хотите, чтобы рендеринг
GetBackgroundColor
?