假设你有一个这样的模型:
class Foo
{
public int A {get; set;}
public int B {get; set;}
}
class SomeModel
{
public List<Foo> Foos { get; set; }
}
在 ASP.NET mvc 框架的 razor 视图中,您可以执行以下操作:
@model SomeModel
@for(int i = 0; i < Model.Foos.Count; ++i)
{
Html.EditorFor(x => x.Foos[i]);
}
Razor 引擎会愉快地吐出包含索引的正确 html,并使用正确的索引实例调用编辑器模板。
该EditorFor
方法是带有签名的静态扩展方法
public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
从签名中可以清楚地看出,它只是采用一个表达式,唯一的上下文来自 HtmlHelper 实例。
我做了非常有限的Expression
树处理,但从我所见,我看不出这个静态方法可以知道它以某种方式神奇地获得的信息的任何方式。
该方法如何EditorFor
找出生成 html 名称的索引并获取正确的实例以传递给编辑器模板?