2010-12-23 83 views
3

我想爲我們的ASP.NET MVC 2應用程序創建一個即席查詢頁面。此頁面是安全的,並嚴格用於我們Intranet上的技術管理訪問。我們希望能夠查詢少量表格,而且我不希望每個查詢都有頁面/網格。我有一個MVC控制器返回包含以下值的JSON結果(我從客戶端JavaScript警報中獲得了這些值,因此我知道這些值是「在網格上」的值):動態定義一個jqGrid

colNames包含:

['AccountID','ClientID'] 

colModel包含:

[{editable:false,index:'AccountID',jsonmap:'AccountID',key:false,name:'AccountID',resizable:true,search:false,sortable:true,width:300}, 
{editable:false,index:'ClientID',jsonmap:'ClientID',key:false,name:'ClientID',resizable:true,search:false,sortable:true,width:300}] 

colData包含:

{total:1,page:1,records:1,rows:[{AccountID:1,ClientID:1}]} 

而且,在客戶端上,我jqGrid的樣子:

jQuery(document).ready(function() { 

    $.ajax({ 
     type: 'POST', 
     url: '<%: Url.Action("GetData", "Support") %>', 
     data: { query: 'foo' }, 
     dataType: 'json', 
     success: function (result) { 

      alert(result.colNames); 
      alert(result.colModel); 
      alert(result.colData); 

      jQuery('#QueryGrid').jqGrid({ 
       jsonReader: { repeatitems: false }, 
       shrinkToFit: true, 
       datatype: 'jsonstring', 
       colNames: result.colNames, 
       colModel: result.colModel, 
       datastr: result.colData, 
       viewrecords: true 
      }); 
     }, 
     error: function (x, e) { 
      alert(x.readyState + ' ' + x.status + ' ' + e.msg); 
     } 
    }); 
}); 

我一直把這個共同基礎上幾個相關的帖子/回覆這裏在堆棧溢出,還有jqGrid的維基。我非常肯定,我非常非常接近......但它只是沒有解決問題。

我遇到的問題是jqGrid拋出一個錯誤「colNames的長度爲<> colModel!」我似乎無法弄清楚它是不是我的JSON字符串,它不喜歡它。

有人看到我在這裏失蹤?

回答

1

我想你收到的數據爲result.colNamesresult.colModel是字符串,而不是對象

var cn = ['AccountID','ClientID']; 
var cm = [ 
    {editable:false,index:'AccountID',jsonmap:'AccountID',key:false,name:'AccountID', 
    resizable:true,search:false,sortable:true,width:300}, 
    {editable:false,index:'ClientID',jsonmap:'ClientID',key:false,name:'ClientID', 
    resizable:true,search:false,sortable:true,width:300}]; 
var cd = '{total:1,page:1,records:1,rows:[{AccountID:1,ClientID:3}]}'; 
jQuery('#QueryGrid').jqGrid({ 
    jsonReader: { repeatitems: false }, 
    height: 'auto', 
    colNames: cn, 
    colModel: cm, 
    datastr: cd, 
    viewrecords: true 
}); 

順便說一些你在colModel參數使用屬性爲默認。參數shrinkToFit: true也是默認值。所以,你可以減少

[{index:'AccountID',jsonmap:'AccountID',name:'AccountID',search:false,width:300}, 
{index:'ClientID',jsonmap:'ClientID',name:'ClientID',search:false,width:300}] 

如果要使用jsonReader: { repeatitems: false, cell:"" }那麼它可以更短

[{index:'AccountID',name:'AccountID',search:false,width:300}, 
{index:'ClientID',name:'ClientID',search:false,width:300}] 

也許你真正想要的是發送result.colNamesresult.colModel作爲一個JSON字符串可轉換例如與對象jQuery.parseJSON有關。在這種情況下,您應該更改result.colNamesresult.colModel中的數據格式。以下代碼也將工作

var cnStr = '["AccountID","ClientID"]'; 
var cmStr = '[{"index":"AccountID","name":"AccountID","search":false,"width":300},{"index":"ClientID","name":"ClientID","search":false,"width":300}]'; 
var cd = '{total:1,page:1,records:1,rows:[{AccountID:1,ClientID:3}]}'; 
jQuery('#QueryGrid').jqGrid({ 
     jsonReader: { repeatitems: false, cell:"" }, 
     datatype: 'jsonstring', 
     height:'auto', 
     colNames: jQuery.parseJSON(cnStr), 
     colModel: jQuery.parseJSON(cmStr), 
     datastr: cd, 
     viewrecords: true 
    }); 

還有一點小話。您不要在jqGrid數據中使用key:trueid值。這是潛在的危險。如果數據中不存在id,則應該忽略jqGrid使用id =「1」,id =「2」等等。如果您在一個頁面上使用兩個或多個此類網格,則可能會出現問題。你可以很容易地收到雙ids這是不允許的。