目的を説明する単純なモデルがあるとします。
public class Category
{
...
public IEnumerable<Product> Products { get; set; }
}
意見:
@model Category
...
<ul>
@Html.EditorFor(m => m.Products)
</ul>
エディター テンプレート:
@model Product
...
<li>
@Html.EditorFor(m => m.Name)
</li>
の EditorTemplate を定義する必要がないことに注意してください。モデルIEnumerable<Product>
用にしか作成できずProduct
、MVC フレームワークは IEnumerable 用に独自のテンプレートを使用できるほどスマートです。コレクションを反復処理し、EditorTemplate を呼び出します。
出力htmlは次のようになります
...
<li>
<input id="Products_i_Name" name="Products[i].Name" type="text" value="SomeName">
</li>
結局、コントローラーに投稿できます。
しかし、テンプレート名を使用して EditorTemplate を定義すると、MVC がうまくいかないのはなぜでしょうか?
@Html.EditorFor(m => m.Products, "ProductTemplate")
その場合、プロパティのタイプを に変更し、IList<Product>
自分でコレクションを反復処理して、EditorTemplate を呼び出す必要があります。
@for (int i = 0; i < Model.Products.Count; i++)
{
@Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
これは私には汚い回避策のようです。これを行うための他のよりクリーンなソリューションはありますか?