2

jquery ajax 呼び出しを介してデータを送信する際に、ややこしい問題が発生します。基本的に、 jquery を使用して管状グリッドに画面に動的に追加されたフォーム フィールドのフォーム値は、バッチ保存コマンドで更新されません。

基本的に、データベースに保存されている現在のすべての行を表示するグリッド リストがあり、各列にはフォーム フィールドが含まれています。次に、ページの上部に別の詳細を追加する典型的なフォームがあります。値を入力し、「追加」を押します。これは jquery json ajax 呼び出しを介してデータベースに保存され、フォーム データが追加され、リスト テーブルの新しい行に反映されます。(この部分は機能します)

私の問題は、新しく追加された jquery テーブルの行内でフォームの値を変更したい場合にあります。保存ボタンが押されると、すでに作成されたテーブル行のみが再保存されます。動的行フォーム データは保存されませ。update 呼び出しは、jquery ajax と ASP.NET MVC モデル バインディングを使用します。「追加」で、asp.net mvcの「部分ビュー」をjquery ajax応答に返し、$("#tablename tr:last").after(result).

私がすでに推測したことは、前述のように、動的に追加された新しい行は更新されないということです。IList<Item>新しく作成された jquery の動的に追加されたフォーム フィールドの行を除いた、項目のリスト全体を含むコントローラー アクション メソッドへの MVC モデル バインディング リストで返されるセットがあります。これが問題であり、ページの更新を実行すると、行が最初の追加時に入力された元のフォームの値に戻る理由です。

IList<Item>の にこれらの動的に追加された行が含まれない理由はありますか? Firebug で調べると、name 属性に同じ命名規則が使用されており、すべて問題ないはずです。

グラハム。

更新 1 5 月 11:00 GMT+10: モデル バインドを IList から FormCollection に変更すると、値が表示されます。モデル バインドではなく FormCollection を使用する必要はありませんが、FormCol を介して正しく取得できるかどうかという疑問が生じます。なぜ IList モデル バインダーを使用しないのでしょうか? 配列エントリを作業項目と比較しましたが、それらはすべて同じ基準と値に適合しています。

4

3 に答える 3

5

私は ASP プログラマーではありませんが、多くの jquery 作業を行っています。あなたの問題を正しく理解していれば、動的に生成された行は、更新操作を実行するコールバック関数にバインドされていません。

動的に生成された要素をコールバックにバインドするには、jQuery の「ライブ」関数を使用するか (Wikidkaka が伝えようとしていたように)、または ajax 呼び出しが返されたときに起動されるコールバック関数で新しく作成された要素を手動でバインドできます。

jQuery の最新リリースで追加されたネイティブの live 関数を使用することをお勧めします (私は信じています)。コールバックを手動でバインドするために追加の行を記述する必要がなくなり、コードのメンテナンスが容易になります。

だから変更:

$('div.your-save-buttons').click(updateFunction);

$('div.your-save-buttons').live(updateFunction);
于 2009-06-05T00:02:34.070 に答える
3

あなたがやろうとしていることには、プラグイン livequery を使用してください。ここで見つけることができます - http://docs.jquery.com/Plugins/livequery

これは、動的に追加されたほとんどの要素では機能しません。

$("select something").onSomeEvent("do something");

ただし、livequery プラグインを使用すると、JS コードを以下のように変更することで機能させることができます。

$("select something").livequery('event name','do something');

于 2009-06-03T10:29:23.790 に答える
0

Model のプロパティが整数のリストである場合、 を使用IEnumerable<int>して自動モデル バインディングを取得できます。これは、パラメーターが でIEnumerable<int>ある Action メソッドと、パラメーターが であるプロパティを持つ Model であるAction メソッドの両方で機能しますIEnumerable<int>。たとえば、次のようにします。

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

public ActionResult Update(IEnumerable<int> myField) { }

また

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
于 2009-06-08T22:51:21.647 に答える