Я предполагаю, что когда представление страницы отрисовывается, LabelFor вызывается автоматически со ссылкой на описанную модель, и что функция Lambda сообщает, как получить необходимую информацию из модели?
Я не совсем уверен, что понимаю, что вы имеете в виду под этой частью, я думаю, вы имеете в виду, как @LabelFor
знает, какую модель использовать?
Ну да, если вы посмотрите на синтаксис , который выглядит следующим образом:
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
Вы можете видеть, что первый параметр начинается с this
, что делает его методом расширения.Когда вы добавляете строку, @model CurrencyMvc.Models.RegisterModel
this HtmlHelper<TModel>
становится вашим RegisterModel.
Мне не понятно, почему мы передаем функцию, когда мы можем передать фактическое значение egmUsername.
В большинстве случаев «лямбда-выражение» - это просто Func<T>
, но с бритвой @Html.xfor
(например, @Html.LabelFor
), которую вы передаете в Expression<Func<TModel, TValue>>
- древовидная структура данных для лямбда-выражения.С точки зрения непрофессионала;вид нескомпилированного Func.
Если вы передадите m.Username
, метод будет просто иметь "Dale Burrell".Но, например, текстовое поле html генерируется как
<input type="text" name="Username" value="Dale Burrell">
Итак, как вы можете видеть, ему действительно нужно m.Username
имя переменной
Oh, и когда этот помощник вызывается где«m» взято?
Это просто переменная.Также как foreach(var m in dataset){}
"откуда взялся м?"- Вы сделали это.Вы можете заменить м на что угодно