0

ユーザーがエントリを追加できるテーブルがあり、ユーザーが完了したら、別のエントリを追加できます。

エントリを追加した後、再度削除できます。ここで問題が発生します。ここに例があります

アクション:

Public ActionResult Submit(List<String> Names)
{
   //DO STUFF
}

エントリを追加すると、前のエントリのインデックスが取得され、隠しフィールドが追加されるため、最終的には次のようになります。

HTML:

 <input type="hidden" name='Names[0]' value='John'/>
 <input type='hidden' name='Names[1]' value='Peter' />
 <input type='hidden' name='Names[2]  value='David' />

これを送信すると、すべての名前が正しくマップされます。問題は、送信前に名前を追加した後、ユーザーが名前の 1 つを削除できることです。値が「Peter」の入力を削除すると、html は次のようになります。

削除後の HTML:

 <input type="hidden" name='Names[0]' value='John'/>
 <input type='hidden' name='Names[2]  value='David' />

これが送信されると、値が「John」の入力のみがマップされます。

HTMLのすべてのインデックスをやり直すjquery関数をコーディングせずにこれを修正する方法を知っている人はいますか? バインディング、オーバーライドなどにサーバー側を追加できるソリューションを探しています。jquery を使用したくない理由は、そのような機能を備えた複数のページがあり、ページごとに実行するとかなり時間がかかるためです。

** * **編集* ** * ***

上記のコードは単なる例です。バインドしようとしているモデルの 1 つは次のようになります。

public class Product {
   public string Code {get;set;}
   public string Name {get;set;}
   public int Quantity {get;set;}
   public decimal Price {get;set;}

}

そして明らかに私のアクションで

public ActionResult Submit(List<namespace.Product> Products)
{
  //do stuff
}
4

4 に答える 4

0

Zabavsky のコメントのおかげで、探していた解決策が見つかりました。

非順次インデックスを使用しました。

以下に例を示します。

アクション:

 public ActionResult Create(List<namespace.Product> Products)
 {
    //do stuff
 }

モデル:

public class Product {
   public string Code {get;set;}
   public string Name {get;set;}
   public int Quantity {get;set;}
   public decimal Price {get;set;}

}

私のフォームでは、html は次のようになります。

<input type='hidden' name='Products.Index' value='1'/>
<input type='hidden' name='Products[1].Code' value='xyz' />
<input type='hidden' name='Products[1].Name' value='Shirt' />
<input type='hidden' name='Products[1].Quantity' value='5'/>
<input type='hidden' name='Products[1].Price' value='50'/>

<input type='hidden' name='Products.Index' value='7'/>
<input type='hidden' name='Products[7].Code' value='zxy' />
<input type='hidden' name='Products[7].Name' value='Pants' />
<input type='hidden' name='Products[7].Quantity' value='8'/>
<input type='hidden' name='Products[7].Price' value='70'/>

<input type='hidden' name='Products.Index' value='foo'/>
<input type='hidden' name='Products[foo].Code' value='1234' />
<input type='hidden' name='Products[foo].Name' value='Shoes' />
<input type='hidden' name='Products[foo].Quantity' value='2'/>
<input type='hidden' name='Products[foo].Price' value='100'/>

これらはすべて正しくバインドされます。追加する必要があったのは次のとおりです。

<input type='hidden' name='Products.Index' value='1'/>

これが機能するには、すべてのインデックス値が一意である必要があるため、数行の jquery でこれを実現できました。

詳細については、こちらを参照してください:リストへのモデルのバインド

于 2013-11-15T07:02:11.067 に答える