HTML Helper, как использовать IEnumerable - PullRequest
0 голосов
/ 25 октября 2018

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

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

1 Ответ

0 голосов
/ 26 октября 2018

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

...