2012-04-12 13 views
0

JQueryグリッドを使用してページにデータを表示しています。コントローラアクションメソッドに渡す必要のあるグリッドにフィルタを適用するためのチェックボックスの一覧があります。私の問題は、選択されたチェックボックスの値がPOSTデータを渡す前に正しく取得されているにもかかわらず、コントローラに表示されません。私が選択したチェックボックスをページにロードしている場合、その場合は値が渡されています。なぜこれが起こっているのか、私は非常に混乱しています。私は本当にどんな助けでも素晴らしいだろう。私はグリッドを結合するために使用していた下のコードを参照してください:SP、SS及びSAKパラメータのJQueryグリッドPostDataがコントローラアクションメソッドに値を渡していません - MVC3

function BindGrid() { 

     var selectedPriority = []; 
     $('#priority input:checked').each(function() { 
      selectedPriority.push($(this).val()); 
     }); 
     var selectedState = []; 
     $('#state input:checked').each(function() { 
      selectedState.push($(this).val()); 
     }); 
     var selectedAckState = []; 
     $('#ackState input:checked').each(function() { 
      selectedAckState.push($(this).val()); 
     }); 

     var x = convertIntArrayToString(selectedPriority); 
     var y = convertIntArrayToString(selectedState); 
     var z = convertIntArrayToString(selectedAckState); 

     jqDataUrl = "Alarm/LoadjqData"; 
     // Set up the jquery grid 
     //$("#jqTable").jqGrid('clearGridData'); 
     $("#jqTable").jqGrid({ 
      url: jqDataUrl, 
      datatype: "json", 
      mtype: "POST", 
      postData: { 
       sp: x, 
       ss: y, 
       sak: z 
      }, 
      cache: false, 
      // Specify the column names 
      colNames: ["Id", "PointRef", "Value", "AlarmStateName", "AckStateName", "Priority", "AlarmDate"], 

      // Configure the columns 
      colModel: [ 
       { name: "AlarmId", index: "AlarmId", width: 70, align: "left" }, 
       { name: "PointRef", index: "PointRef", width: 200, align: "left" }, 
       { name: "Value", index: "Value", width: 200, align: "left" }, 
       { name: "AlarmStateName", index: "AlarmStateName", width: 150, align: "left" }, 
       { name: "AcknowledgementStateName", index: "AcknowledgementStateName", width: 170, align: "left" }, 
       { name: "Priority", index: "Priority", width: 100, align: "left" }, 
       { name: "AlarmDate", index: "AlarmDate", width: 250, align: "left" } 
       ], 

      // Grid total width and height 
      width: 700, 
      height: 250, 

      // Paging 
      toppager: true, 
      pager: $("#jqTablePager"), 
      rowNum: 10, 
      rowList: [5, 10, 20], 
      viewrecords: true, // Specify if "total number of records" is displayed 

      // Default sorting 
      sortname: "AlarmId", 
      sortorder: "desc", 

      // Grid caption 
      caption: "Telemetry Alarms" 
     }).navGrid("#jqTablePager", 
       { refresh: true, add: false, edit: false, del: false }, 
        {}, // settings for edit 
        {}, // settings for add 
        {}, // settings for delete 
        {sopt: ["cn"]} // Search options. Some options can be set on column level 
      ) 
     //.trigger('reloadGrid', [{ page: 1}]); 
      .trigger('reloadGrid'); 

    } 

    function convertIntArrayToString(data) { 
     var x=''; 
     //alert(data.length); 
     for(var i=0;i<data.length;i++) { 
      x = x + data[i] + ","; 
     } 
     if (x != '') { 
      x = x.substr(0, x.length - 1); 
      //alert(x); 
     } 
     return x.toString(); 
    } 

//Controller action method 

[HttpPost] 
     public ActionResult LoadjqData(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchOper, 
      string searchString, string sp, string ss, string sak) 
     { 

      //code ommited. 
      return Json(jsonData); 
     } 

値はコントローラにapprearingされていません。

+0

このポストを試してみてください。 http://stackoverflow.com/questions/9849469/variables-contain-values-but-in-action-they-equals-null/9849726#9849726 –

+0

こんにちはnaim、応答のおかげで、このポストは役に立たない。私が気づいたのは、グリッドが 'PostData'を通じて提供されるパラメータをキャッシュすることです。私が$( "#jqTable")をアンロードしている場合、jqGrid( 'GridUnload');グリッドを作成し、それをバインドすると、パラメータが正しく渡されます。 Jqueryがパラメータをキャッシュするのを止める良い方法はありますか?提案してください – binu

答えて

0

この投稿は、私の問題を解決しました:

jqgrid not updating data on reload

私は別の関数にチェックボックスの値を読み取るためのコードを移動しなければならなかったとPostDataの内部でその機能にアクセスし、それが魅力のように働きました。これがなければ毎回同じデータを送信していました。

更新されたコードは以下の通りです:

function BindGrid() { 
    var jqDataUrl = null; 
    jqDataUrl = "Alarm/LoadjqData" //+ x; 
    $("#jqTable").jqGrid({ 
     url: jqDataUrl, 
     cache: false, 
     datatype: "json", 
     mtype: "POST", 
     postData: { 
      sp: function() { return getPriority(); } 
     }, 
     // Specify the column names 
     colNames: ["Id", "PointRef", "Value", "AlarmStateName", "AckStateName", "Priority", "AlarmDate"], 

     // Configure the columns 
     colModel: [ 
      { name: "AlarmId", index: "AlarmId", width: 70, align: "left" }, 
      { name: "PointRef", index: "PointRef", width: 200, align: "left" }, 
      { name: "Value", index: "Value", width: 200, align: "left" }, 
      { name: "AlarmStateName", index: "AlarmStateName", width: 150, align: "left" }, 
      { name: "AcknowledgementStateName", index: "AcknowledgementStateName", width: 170, align: "left" }, 
      { name: "Priority", index: "Priority", width: 100, align: "left" }, 
      { name: "AlarmDate", index: "AlarmDate", width: 250, align: "left" } 
      ], 

     // Grid total width and height 
     width: 700, 
     height: 250, 

     // Paging 
     toppager: true, 
     pager: $("#jqTablePager"), 
     rowNum: 10, 
     rowList: [5, 10, 20], 
     viewrecords: true, // Specify if "total number of records" is displayed 

     // Default sorting 
     sortname: "AlarmId", 
     sortorder: "desc", 

     // Grid caption 
     caption: "Telemetry Alarms" 
    }).navGrid("#jqTablePager", 
      { refresh: true, add: false, edit: false, del: false }, 
       {}, // settings for edit 
       {}, // settings for add 
       {}, // settings for delete 
       {sopt: ["cn"]} // Search options. Some options can be set on column level 
     ) 
     .trigger('reloadGrid'); 

} 

function convertIntArrayToString(data) { 
    var x = ''; 
    //alert(data.length); 
    for (var i = 0; i < data.length; i++) { 
     x = x + data[i] + ","; 
    } 
    if (x != '') { 
     x = x.substr(0, x.length - 1); 
     //alert(x); 
    } 
    return x.toString(); 
} 

function getPriority() 
{ 
var selectedPriority = []; 
    $('#priority input:checked').each(function() { 
     selectedPriority.push($(this).val()); 
    }); 
    return convertIntArrayToString(selectedPriority); 

} 
関連する問題