次のようなモデルがあるとします。
class Foo
{
public int A {get; set;}
public int B {get; set;}
}
class SomeModel
{
public List<Foo> Foos { get; set; }
}
ASP.NET mvcフレームワークのかみそりビューでは、次の操作を実行できます。
@model SomeModel
@for(int i = 0; i < Model.Foos.Count; ++i)
{
Html.EditorFor(x => x.Foos[i]);
}
そして、レイザーエンジンは、インデックスを含む正しいhtmlをうまく吐き出し、正しいインデックス付きインスタンスを使用してエディターテンプレートを呼び出します。
EditorFor
メソッドは、署名付きの静的拡張メソッドです
public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
シグニチャから、それが単に式を取っていることは明らかであり、唯一のコンテキストはHtmlHelperインスタンスから来ています。
私は非常に限られたExpression
ツリー処理を実行しましたが、私が見たものから、この静的メソッドが何らかの形で魔法のように取得している情報を知ることができる方法はわかりません。
このメソッドは、HTML名を生成するためのインデックスをどのようにEditorFor
把握し、エディターテンプレートに渡す正しいインスタンスを取得できますか?