Основной MVC: что делает "modelItem =>"?
Вот пример строки кода, который часто генерируется Visual Studio в приложении типа MVC:
@Html.DisplayFor(modelItem => item.LastName)
- Я понимаю, как работает бритва (
@
)
- Я понимаю, что Html - это объект со статическими вспомогательными функциями, например
DisplayFor()
- Я понимаю
item.LastName
, поскольку это свободно представляет строку и столбец из данных/модели
... но какая черта modelItem =>
? В свое время =>
использовался как оператор, который был оценен как логическое значение. Что это за колдовство?
Ответы
Ответ 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 для типа данных.