0

私は次のものを持っています:

     function setupGrid(labId) {

       var url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;
       alert(url);

       $("#loginList").jqGrid({
         url: url,
         datatype: "json",
         colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
       .....
       .....  

次のコードもあります。

    <script type="text/javascript">
      $(document).ready(function () {
       var labId;

       $("#LabId").change(function () {   // point1
        labId = $("#LabId").val();
        setupGrid(labId); // this goes to setupGrid but DOES NOT go to the given url( url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)         
       });

       // point 2
       setupGrid(labId);  // this goes to setupGrid  and DOES go to the given url(url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)
       ......

プログラムが初めて実行されると、point2 に移動し、次に setupGrid 関数に移動して、次の URL 値に移動します。

    url: url

.change (point1) から呼び出すと、再び SetupGrid に移動し、アラートに正しい値が表示されますが、URL にブレークポイントを設定すると URL に移動しない理由がわかりません。初めて動作するのはなぜですか? .change から実行すると、URL に移動しません。

4

1 に答える 1

0

jqGridがどのように機能するかについて一般的な理解の問題があることがわかります。

使用する場合は、。を含む$("#loginList").jqGrid({...});空の<table>要素が必要id="loginList"です。jqGridは、<table>要素をdiv、テーブルなどの比較的複雑な構造に変換します。したがって、jqGridは最初にグリッドを初期化します。グリッドの外側部分を構築します。

次に、jqGridはAjaxを呼び出してurl(使用の場合datatype: "json"またはdatatype: "xml")、グリッド本体を埋めます。$("#loginList").trigger("reloadGrid")グリッド本体を更新するために使用できます。

一度しか電話でき$("#loginList").jqGrid({...});ないことが明らかになったといいのですが。既存のグリッドからもう一度グリッドを作成しようとすると、lは無視されます。

あなたがすべきことは、コードを次のように書き直すことです。

$(document).ready(function () {
    var labId;

    $("#loginList").jqGrid({
        url: '@Url.Action("GetProgData", "Prog")',
        postData: {
            lId: function () {
                return $("#LabId").val();
            }
        },
        datatype: "json",
        colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
    });

    $("#LabId").change(function () {   // point1
        $("#loginList").trigger("reloadGrid");
    });
});

のプロパティ内でのメソッドの使用法について詳しくは、こちらをご覧くださいpostData別の回答では、1つのフォームのすべてのコントロールからコントローラーアクションに値を送信する必要がある場合に実用的な代替方法を見つけることができます。

于 2013-01-15T08:59:50.217 に答える