xxxForとname
EFでICollection
ビューヘルパーが出力するname属性は変更できない。@Html.Row(Html.xxxFor(…)).Replace(…)みたいな事をやれば無理矢理変えられそうではある。またEditorForには引数で指定できるオーバーロードがある。ただこれは自作テンプレート内で出力されるname属性の先頭に付くSystem.Web.Mvc.TemplateInfo.HtmlFieldPrefixの書き換えには役立つが、その他の用途を今のところ私は知らない。
で、どうするかというとBeginCollectionItemを使うのがいいでしょう。
- MVC Series Part 1: Dynamically Adding Items Part 1 | //InterKnowlogy/ Blogs
- http://blogs.interknowlogy.com/2014/08/01/mvc-series-part-1-dynamically-adding-items-part-1/
- GitHub - danludwig/BeginCollectionItem: This Html Helper leverages the default model binder in ASP.NET MVC 2 and higher to materialize viewmodel collection properties from an HTTP POST.
- https://github.com/danludwig/BeginCollectionItem
NuGetで取ってきてもいいが、普通にソース拾ってきちゃえば良さげ(現時点ではMs-PL)。
ビューヘルパーさんはラムダ式見てModelと同じだったらElementAt(i)とか使ってもいい感じにnameつけてくれるみたい。逆に変数にとってそれを使うとその変数名を付加してくれちゃうので、良いか悪いかはケースバイケース。