非シーケンシャル要素をMVCのリストにバインドしたい場合は、ここでIndex
説明する構文を使用できることを知っています。
ただし、これを処理するためのリモート検証を取得できません(Remote
属性を使用)。
たとえば、次のようなモデルがある場合:
public class AddUsers {
public List<User> Users { get; set; }
public string Comment { get; set; }
}
public class User {
[Remote("UsernameAvailable", "User")]
public string Name { get; set; }
}
次に、私の見解では、次のようなものがあるとします(わかりやすくするために、使用しているHtmlヘルパーを意図的に省略しています)。
<input type="hidden" name="Users.Index" value="foo" />
<input type="text" name="Users[foo].Name" />
<input type="hidden" name="Users.Index" value="bar" />
<input type="text" name="Users[bar].Name" />
フォームの投稿では、Index
フィールドはライドに沿って進みます。これは、モデルバインダーが次のようにすべてをうまくバインドするのに役立ちます。
Comment=bla&Users.Index=foo&Users[foo].Name=john&Users.Index=bar&Users[bar].Name=bob
しかし、リモート検証がトリガーされると、これだけが私のアクションに送信されます(2つの別々のリクエスト、検証されるアイテムごとに1つ):
Users[foo].Name=john
Users[bar].Name=bob
がないとIndex
、モデルバインダーはこれをどうするかわかりません。User
、、、またはにバインドすることはできませList<User>
んAddUser
。
それは私の質問に私をもたらします。
Index
表記を使用せずに非順次リストを処理できるカスタムモデルバインダーを作成する方法はありますか?なぜIndex
表記が必要なのかを理解するのは難しいことを認めなければなりません(おそらく何らかの最適化を除いて)。
私はMVC4と.NET4.5を使用しています。
注:私はこれまでカスタムモデルバインダーをいじったことがないので、それが可能かどうか(または行き止まり)についての一般的なガイダンスと、おそらく開始するためのいくつかのポインターを探しています。