Подтвердить что ты не робот

Основной MVC: что делает "modelItem =>"?

Вот пример строки кода, который часто генерируется Visual Studio в приложении типа MVC:

@Html.DisplayFor(modelItem => item.LastName) 
  • Я понимаю, как работает бритва (@)
  • Я понимаю, что Html - это объект со статическими вспомогательными функциями, например DisplayFor()
  • Я понимаю item.LastName, поскольку это свободно представляет строку и столбец из данных/модели

... но какая черта modelItem =>? В свое время => использовался как оператор, который был оценен как логическое значение. Что это за колдовство?

4b9b3361

Ответ 1

То, что вы делаете, - это передача лямбда-выражения. Они по существу те же, что и делегаты, указатели на функции в C или функции в Javascript. В основном вы говорите Html DisplayFor "используйте эту функцию, чтобы получить элемент отображения". Вероятно, ваш пример должен быть:

@Html.DisplayFor(modelItem => modelItem.LastName)

В противном случае вы пытаетесь закрыть "элемент" из внешней области. Если это то, что вы действительно пытаетесь сделать, то ModelItem практически ничего не делает...

см. http://msdn.microsoft.com/en-us/library/bb397687.aspx

Ответ 2

Я только что увидел modelItem в каком-то подстроенном MVC-коде, и я подумал, что просто добавлю ответ на bunglesticks.

Кусок кода в вопросе, вероятно, исходит из стандартного визуального представления MVC (где модель является IEnumberable<TModel>) и имеет это вокруг:

@foreach (var item in Model) {

}

В этом коде используется эта перегрузка DisplayFor:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

Поэтому modelItem (как сказал bunglestink) ничего не делает (он не используется в результате). item.LastName возвращает фактическое LastName для этого элемента в IEnumerable и DisplayFor будет генерировать правильный html для типа данных.