3

<input />ASP.NET MVC のコレクション モデル バインドでは、コレクション モデルを正しくバインドするには、name 属性に角かっこのインデックスが必要です。たとえば<input name="Lines[0].Name" />、次のようなアクションを使用します。

public ActionResult Create(IEnumerable<MyInputModel> Lines) {
    // ...
}

ただし、name 属性のピリオドと角括弧は、私が使用しているSelect2リスト セレクターを含む特定の jQuery プラグインの既知の問題です。

Select2 をハックしたくないので、ASP.NET MVC に角かっこの代わりにピリオドやアンダースコアなどを使用してコレクション インデックスを区切るように指示するにはどうすればよい<input name="Lines.0.Name" />でしょうか。


注:このコレクション モデル バインディング手法を使用して非連続Guidインデックスを生成しているため、既に custom を宣言していますHtmlFieldPrefixScope


更新:[無効な文字または]文字をbind/ unbindjQuery メソッドに渡す Select2 イベントのカスタム スクロール/サイズ変更イベント名をハッキングすることで、これを解決しました。

4

4 に答える 4

0

それを達成するために DefaultModelBinder をカスタマイズすることはできません。FormValueProviderただし、受信プレフィックス形式を変換してList.0.NameそのList[0].Name値を返すカスタムを使用できます。

于 2012-09-21T13:53:53.320 に答える
0

「name」属性の代わりに「id」属性を使用するようにセレクターを変更できるかどうかはわかりません。その場合、MVC でのコレクション バインディングは引き続き機能し、Select2 で使用できる id 属性に jquery セーフ値が含まれます。

@for(int i=0; i<Lines.Count; i++) {
    <input name="@Html.FieldNameFor(m=>m.Name)" id="@Html.FieldIdFor(m => m.Name)" />
}
于 2012-09-21T15:55:26.197 に答える
0

エンティティのリストが本当に必要ですか? そうでない場合は、文字列のリストで十分なので、インデックス付きの括弧をスキップできます:

于 2012-09-21T13:37:08.153 に答える
0
public ActionResult Create(List<MyInputModel> Lines) {
    // ...
}

<input name="Lines[0].Name" />

入力名がリスト名と同じであり、インデックスが 0 で始まることを確認してください。

ああ、すみません、理解できません。この方法を試してください。

@foreach (var item in Model)
{
   var name = string.Format("Lines[{0}].name", i);
   <input type="text" name="@name" value="@item.name" />
}
于 2012-09-21T13:15:19.577 に答える