1

JQGridをMVC3アプリケーションに統合するために、JQSuiteのTrirand.Web.MVCdllを使用しています。

JQGridのHTMLヘルパーを使用しているので、ビューには次のものがあります。

@Html.Trirand().JQGrid(Model.MyGrid, "Grid")

次のコードを使用して、ボタンをクリックするだけでグリッドをリロードできることを知っています。

$("#Grid").trigger("reloadGrid");

これにより、グリッドがリロードされ、JQGridを設定するためにコントローラーコードで指定したActionメソッドが呼び出されます。

検索/フィルタリングに使用する他のコントロールがページにあります。これらはアクションメソッドに正常に渡されます。

setGridParamメソッドを見つけました。これは、次のようなことができることを示しているようです。

$("#Grid").setGridParam({ someParam: 'blah' }).trigger("reloadGrid");

またはこれ:

$("#Grid").jqGrid('setGridParam', { postData: { someParam: 'somevalue'} }).trigger("reloadGrid");

しかし、アクションメソッドのsomeParamパラメーターがどちらのメソッドでも満たされません

これらをJQGridに設定して、リロードを実行するときにActionメソッドによって取得されるようにするにはどうすればよいですか?

更新:私は今、別のパラメーターに対してこのメ​​ソッドを試しましたが、機能します!

だから今私は持っています:

$("#Grid").jqGrid('setGridParam', { postData: {
            someParam: 'somevalue', 
            paramTwo: ' some value',
            paramThree: 'some other value'
        } }).trigger("reloadGrid");

someParamは機能しませんが、paramTwoとParamThreeは機能します。

変!

1つのパラメータが機能しなくなる原因は何ですか?

UPDATE2: 次のようにOlegの提案を使用します:

var myGrid = jQuery("#Grid").jqGrid({                
                postData: {
                    someParam: function () { return $("#txtBox1").val(); },
                    paramTwo: function () { return $("#txtBox2").val(); },
                    paramThree: function () { return $("#txtBox3").val(); }
                }
            });

        myGrid.trigger('reloadGrid'); 

...どの値も送信されません。リロードを実行する前に、JQueryが正しい値を返すことを検証しました。

4

2 に答える 2

2

あなたが正しいと理解したら、パラメーターを使用postDataして追加のパラメーターをサーバーに送信できます。最も単純な方法はpostData、メソッド (関数としてのプロパティ) を使用することです。

postData: {
    myCustomParam: function () { return $("#myInputFiled").val(); }
}

詳細については、こちらをご覧ください。この場合、現在の値はアクションへのリクエストで読み取られ、その値は name の追加パラメータとして送信されますmyCustomParam

フォームからすべてのコントロールの値を取得する必要がある場合は、$.serializeArray関数を使用して、すべての結果を 1 つの追加パラメーターとして送信できます。

postDataパラメータを使用して参照を取得しgetGridParam、新しい追加プロパティを設定/変更できます。オブジェクトパラメータを要求すると、内部パラメータへの参照が返されるためgetGridParam、使用する必要はありませんsetGridParam

更新: グリッドが作成される前またはその後にコードが実行される場所がわかりません。次のコードを試すことができます

<script type="text/javascript">
    $(function () {
        var $grid = $("#<%= JQGrid1.ClientID %>");
        if ($grid.length > 0 && $grid[0].grid !== undefined) {
            var postData = $grid.jqGrid("getGridParam", "postData");
            postData.myParam = function () {
                return "test data";
            };
        } else {
            $.extend($.jgrid.defaults, {
                postData: {
                    myParam: function () {
                        return "test data";
                    }
                }
            });
        }
    });
</script>

どちらの場合でもうまくいくことを願っています。

于 2012-06-11T12:45:15.217 に答える
0

そうです、私を答えに導いてくれたOLEGの助けに感謝します!

問題は、投稿データで「SomeParam」が既に指定されていたため、次のフォームを使用して既存のデータを拡張する必要があったことです。

('#grid').jqGrid({                 
                serializeGridData: function(postData) { 
                  var newPostData = $.extend(postData, {
                      someParam: return $("#txtBox1").val(), 
                      paramTwo: return $("#txtBox1").val(),
                      paramThree: return $("#txtBox1").val(),
                  }); 

                  return $.param(newPostData); 
                } 
            }).trigger("reloadGrid");

この投稿は私を助けてくれました.Olegもそこに投稿しています.

于 2012-06-11T14:27:47.750 に答える