0

テキストボックスとドロップダウンがたくさんあるフォームがあります。ここで、別のサブ オブジェクトの配列を追加し、それをフォーム ポストの一部として含める必要があります。

これを html テーブルとして手でロールするつもりでしたが、jqGrid を活用できると思いました。jqGrid をローカルで使用してデータを追加し、それをフォームの投稿に含める最善の方法は何ですか? ローカルで動作するためにjqGridが必要な理由は、これらは大きなフォームの一部としてのサブレコードであるため、大きなフォームが投稿されるまでjqGrid行を投稿できないためです(したがって、これらの行を結合するIDがあります)

たとえば、私の投稿が注文画面 (日付、指示などのテキストボックスを含む) であった場合、製品を注文に追加できるグリッドが必要です。必要な数の行を持つことができます。.)

提案に役立つ場合、私のバックエンドはasp.net-mvcです。

4

2 に答える 2

2

フォーム編集を使用すると、postdata をさまざまな方法で拡張できます。最も単純なものは、onclickSubmitコールバックの使用です。

onclickSubmit: function (options, postData) {
    return {foo: "bar"};
}

上記のコールバックを使用すると、サーバーに送信されるデータはfoo、文字列値のパラメーターで拡張されます"bar"

別の可能性は、 のeditDataオプションの使用ですeditGridRoweditData最善の方法は、関数として定義されたプロパティを使用することです。データを投稿する前に毎回関数が呼び出されるようにします。

たとえば、次のコード

$("#grid").jqGrid("navGrid", "#pager", {}, {
    editData: {
        foo: function () {
            return "bar";
        }
    },
    onclickSubmit: function (options, postData) {
        return {test: 123};
    }
});

サーバーに送信されるパラメーターに とfoo=barが追加されます。test=123

次の可能性は を使用することserializeEditDataです。コールバックにより、サーバーに送信されるデータを完全に制御できます。

于 2013-04-14T08:23:44.207 に答える
1

オレグが提案したように、シリアル化の方法を使用しています。

見る

  $( "#Save" ).click( function ( e )
            {
                e.preventDefault();


                  var griddata= $( "#list" ).getRowData();
                    var model = {
                        grid: griddata
                    };

                    var gridVal = JSON.stringify( model );
                   //Now set this value to a hiddenfield in the form and submit
                   $('#hiddenGridDta').val(gridVal );
                  $( 'form' ).submit();

});

そしてcontrollerで、 Newtonsoft.json .jsonconvert()を使用して値を逆シリアル化します。

 public ActionResult SaveTest(TestClass test)
        {

       testViewModel myGrid = JsonConvert.DeserializeObject<testViewModel>(test.hiddenGridDta);
................

}

testViewModel クラス

  public class testViewModel 
    {
        public IEnumerable<TestGrid> grid { get; set; }
    }

TestGrid クラス

 public class profileGrid
    {
//fields in the jqgrid (should use the same name as used in *colModel:* of jqgrid)

        public int x
        {
            get;
            set;
        }
        public int y
        {
            get;
            set;
        }
          .......


    }
于 2013-04-15T10:40:06.723 に答える