HTML Helper как использовать IEnumerable

Я хочу создать собственный помощник 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)

но я просто не знаю, что я здесь делаю не так.

Что вы хотите, чтобы рендеринг GetBackgroundColor?

user3559349 25.10.2018 23:19

Что это за тип RiskAssessment? Каким образом применяются настройки CSS, можете ли вы привести пример ожидаемых результатов?

Tetsuya Yamamoto 26.10.2018 04:35

Я показываю таблицу EntityFramework в представлении MVC, используя сценарий, созданный MVC. Я хочу установить цвет строки таблицы в зависимости от свойства, отображаемого в этой строке. Свойство RiskAssessment - это просто bool, поэтому я хотел бы добавить встроенный стиль в строку таблицы в зависимости от того, является ли это свойство истинным или ложным (т.е. установить фон на зеленый или красный), и я бы вернул стиль из помощника HTML. метод, но проблема в том, что я просто не понимаю, как получить свойство модели во вспомогательном методе HTML.

ardmark 26.10.2018 10:57

Разобрался, простая ошибка. Строка заголовка таблицы настроена с помощью @ Html.DisplayNameFor (model => modelType), и я пытался вызвать свой пользовательский помощник HTML с этими параметрами. Мне следовало вызывать метод для каждой строки таблицы, используя @ Html.GetBackgroundColor (modelItem => item.RiskAssessment), и это работает, потому что я могу использовать htmlHelper.ValueFor (выражение) внутри метода для получения значения свойства.

ardmark 26.10.2018 11:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
145
1

Ответы 1

Разобрался, простая ошибка. Строка заголовка таблицы настроена с помощью @Html.DisplayNameFor(model => modelType), и я пытался вызвать свой пользовательский помощник HTML с этими параметрами. Я должен был вызвать метод для каждой строки таблицы, используя @Html.GetBackgroundColor(modelItem => item.RiskAssessment), и это работает, потому что я могу использовать htmlHelper.ValueFor(expression) внутри метода для получения значения свойства. Тем не менее, я понятия не имею, как создается строка заголовка, поскольку Html.DisplayNameFor использует ту же сигнатуру метода, что и мой настраиваемый метод, но Intellisense сообщает, что один из типов выражения неизвестен. Но для меня это не проблема. Спасибо.

Другие вопросы по теме