1

次のポケットベルを備えたjqGridがあります

.navGrid('#pager-mm',{add:false,edit:false,del:false,search:true,view:true},
 {},{},{},
 {multipleSearch:true,multipleGroup:true,showQuery: true},
 {})

ANDとORのグループがネストされた複雑なクエリを作成すると、jqGridはクライアント側で正しいクエリを文字列として作成します。サーバーで同じクエリを再構築して追加のコードを記述するのではなく、正しく構築されたクライアント側のクエリを文字列としてサーバーに送信したいと思います。でも、

beforeSumbit:function()

検索してもトリガーされません。このカスタム文字列をサーバーに送信するにはどうすればよいですか?

4

1 に答える 1

2

私はあなたが本当に欲しいものを完全には理解していません。デフォルトでは、フィルターはfiltersパラメーターとしてサーバーに送信されます。それでも、たとえばonSearchコールバックを使用して、検索フィルターにアクセスできます。使用できます

var filters = $(this).jqGrid("getGridParam", "postData").filters;

filtersのプロパティを取得しますpostData

更新クライアント側で作成されたSQLステートメントのフラグメントを信頼することは決してありません。サーバーコードでクライアントから送信されたSQLフラグメントを使用する場合は、自動的にSQLインジェクションを許可します。アプリケーションでセキュリティが何らかの役割を果たす場合は、jqGridによって作成されたSQLステートメントを使用しないでください。

toSQLStringそれでも、質問が純粋な理論的性質を持っている場合は、検索フィルターのメソッドを使用して、検索ダイアログにSQLステートメントを表示できます。対応するコードは次のようになります

grid.jqGrid('navGrid', '#pager', {edit: false, add: false, del: false}, {}, {}, {}, {
    multipleSearch: true,
    multipleGroup: true,
    showQuery: true,
    recreateFilter: true,
    onSearch: function () {
        var $filter = $("#" + $.jgrid.jqID("fbox_" + this.id)),
            sql = $filter.jqFilter('toSQLString');
        alert(sql);
    }
});

対応するデモはここにあります。ちなみに、メソッドshowQuery: trueを使用できるようにするために使用する必要はありませんtoSQLString

于 2012-10-18T09:54:30.053 に答える