我有一个可能很基本的问题,但我真的不明白。所以它来了。
如果我有一个视图模板文件 ( .cshtml ) 并且有这样的代码行:
@Html.DisplayFor(m => m.CurrentPage.MainBody)
如果我查看 DisplayFor 的声明,它看起来像这样:
public static MvcHtmlString DisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression);
因此,这是一个采用 Expression 参数的扩展方法,但 TModel 和 TValue 似乎是通用的(显然您可以将 lambda 表达式发送到 Expression)。
这里的 lambda 表达式( m => m.CurrentPage.MainBody )怎么知道 m 是什么?
如果我有这样的 lamdba 表达式:
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
那么 (n => n % 2 == 1) 的上下文是逻辑的,lamdba 表达式用于计算每个元素的数字。
但是在上面的情况下,@Html.DisplayFor(m => m.CurrentPage.MainBody) 这里的上下文是什么?m 指的是什么?在这个特定的视图中,这是否以某种方式“神奇地”连接到@model?(在这种情况下是@model PageViewModel<ArticlePage>
“)。
总而言之,表达式 ( m => m.CurrentPage.MainBody ) 中的 m 指的是什么?是否假定它以某种方式通过@model 引用视图中提供的模型?