Второе лямбда-выражение в помощнике HTML индуцирует CS0411 - PullRequest
0 голосов
/ 05 декабря 2018

Многие из моих помощников HTML получают лямбда-выражение в качестве параметра.Помощники вызываются из представлений MVC, а лямбда-выражение предоставляет помощнику одно из полей базовой модели представления.Следующее работает отлично:

//Helper:
public static MvcHtmlString MyHelper<T, TValue>(this HtmlHelper<T> helper,
                                                Expression<Func<T, TValue>> Parameter1
                                                /*More parameters*/)

//View:
@Html.MyHelper(m => m.Field1 /*More parameters*/)

Я хотел бы добавить второй параметр, который сделает второе поле из модели доступным для помощника, что-то вроде этой строки:

//Helper:
public static MvcHtmlString MyHelper<T, TValue>(this HtmlHelper<T> helper,
                                                Expression<Func<T, TValue>> Parameter1,
                                                Expression<Func<T, TValue>> Parameter2
                                                /*More parameters*/)

//View:
@Html.MyHelper(m => m.Field1,
               m => m.Field2 /*More parameters*/)

Представление генерирует ошибку компиляции CS0411 (Аргументы типа для метода '...' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.).Я понимаю суть сообщения об ошибке, но не знаю, как сопоставить это с этим случаем.

Следующее компилируется, но я не знаю, как получить два параметра на стороне метода Helper:

//View:
@Html.MyHelper(m => new 
               {
                   m.Field1,
                   m.Field2
               } /*More parameters*/)

Как перенести более одного поля (столбца) из базовой модели представления в помощник HTML?

1 Ответ

0 голосов
/ 05 декабря 2018

Существует два разных параметра типа, наиболее вероятно, для обоих полей, например Field1 и Field2, когда вы используете одинаковые TValue для обоих.

Так что, когда мы вызываем помощника, типы могут отличатьсяобоих свойств.

В этом конкретном случае вам нужно будет ввести параметр третьего типа.

Так что попробуйте:

public static MvcHtmlString MyHelper<T, TParam1,TParam2>(this HtmlHelper<T> helper,
                                            Expression<Func<T, TParam1>> Parameter1,
                                            Expression<Func<T, TParam2>> Parameter2
                                            /*More parameters*/)

, так как тип обоих свойств можетотличаются, поэтому общий параметр TValue не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...