2012-04-03 20 views
2

MVC ModelBinding - 負けアイテム

public class FirstModel 
{ 
    public List<SecondModel> SecondModels { get; set; } 
} 

public class SecondModel 
{ 
    public string Value { get; set; } 
} 

モデル

そして

@model FirstModel 

.... 
<input name="SecondModels[0].Value" value="test1"/> 
<input name="SecondModels[1].Value" value="test2"/> 
<input name="SecondModels[2].Value" value="test3"/> 
... 

Modelbindingが良い作品。このビュー次考えてみましょう。私は完全なモデルを私のActionMethodに取得します。

たとえば、jQueryを使用して中間のアイテムを削除するとします。

<input name="SecondModels[0].Value" value="test1"/> 
<input name="SecondModels[2].Value" value="test3"/> 

ModelBinderがバインドできないため、SecondModels[2]が失われました。 私は最初の( "test1")だけを取得します。

これを正しくバインドできる別の構文またはCustomModelBinderがありますか、またはアイテムを削除した後にinputの名前を置き換える必要がありますか?

ありがとうございます!

答えて

4

あなたはASPの機能をバインド非シーケンシャルモデルを使用することができます.NET MVCはこちら。

<input type="hidden" name="SecondModels.Index" value="0" /> 
<input name="SecondModels[0].Value" value="test1"/> 

<input type="hidden" name="SecondModels.Index" value="2" /> 
<input name="SecondModels[2].Value" value="test3"/> 

詳細については、非連続インデックスフィル・ハークのブログ記事の部分を見てください:次のようにあなたのケースでは、あなたが何かを必要とする

Model Binding To A List

+0

これはn個の項目の余分な入力フィールドを導入します... – xandercoded

+0

Thats it;)ありがとう!私はHaacked Articleを知っていますが、何らかの理由で私はそれを逃しました。 – dknaack

+0

@ Xanderこれはどのように動作するのですか?オンザフライでランダムなフィールドを生成している場合、インデックスを追跡することは非常に困難です。一方、インデックスをGUIDのようにするなど、このようにバインドすることもできます: '' – tugberk

0

私は、過去のプロジェクトでこれが発生しました...

私の迅速かつ汚いソリューションは、適切な値を持つ項目のリストをインデックスし直すことでした。

ので、この:(インデックス1および3が削除された場合)

<input name="SecondModels[0].Value" value="test1"/> 
<input name="SecondModels[1].Value" value="test2"/> 
<input name="SecondModels[2].Value" value="test3"/> 
<input name="SecondModels[3].Value" value="test4"/> 
<input name="SecondModels[4].Value" value="test5"/> 

はこのようになります。

<input name="SecondModels[0].Value" value="test1"/> 
<input name="SecondModels[1].Value" value="test3"/> 
<input name="SecondModels[2].Value" value="test5"/> 
+0

はい、これを私が今持っているものです。私の質問は、より良い解決策があるということですか? – dknaack

+0

ザンダー、私の答えを見てください。 – tugberk

+0

あなたの質問には、インデックスを再作成していることは記載されていません...私のソリューションはあなたのモデルに適切に再バインドされます... – xandercoded

関連する問題