2009-12-14 64 views
2

我有一個ASP.NET MVC應用程序正在對產品數據庫執行搜索。我想使用TreeGrid模塊在jqGrid中顯示結果。我並不需要網格成爲AJAX-y,因爲數據是靜態的,而且它足夠小,可以一次發送到客戶端。ASP.NET MVC +沒有AJAX的jqGrid

第一個問題:我該如何設置jqGrid,以便不從一個URL中拉取JSON數據,而只是查看一個JS變量或其他東西?

其次,獲取ASP.NET MVC將JSON數據放入JavaScript變量的最合適方法是什麼?我已經在我的控制器中有了List,並且只是想在JSON之後以某種方式把它變成一個JS變量。

還是我對抗當前太多,只是接受jqGrid似乎想工作的AJAX-y方式?

感謝,

〜賈斯汀

回答

4

下面是如何使用JavaScript函數來顯示jqGrid的樹。

$(document).ready(function() { 
    TreeDemo.setupGrid($("#tree")); 
}); 

TreeDemo = { 
    data: { A: ["A1", "A2"], B: ["B1", "B2"] }, 
    setupGrid: function(grid) { 
     grid.jqGrid({ 
      colNames: ['Name'], 
      colModel: [ 
        { name: 'Name', index: 'Name', width: "250em" } 
       ], 
      datatype: TreeDemo.treeData, 
      loadui: "none", 
      sortname: 'Number', 
      treeGrid: true, 
      treeGridModel: "adjacency", 
      sortorder: "asc" 
     }) 
    }, 
    treeData: function(postdata) { 
     var items = postdata.nodeid ? TreeDemo.data[postdata.nodeid] : TreeDemo.data; 
     var i = 0; 
     var rows = new Array(); 
     for (val in items) { 
      var isLeaf = postdata.nodeid != undefined; 
      rows[i] = { 
       Name: val, 
       Id: val, 
       level: postdata.nodeid ? 1 : 0, 
       parent: postdata.nodeid || null, 
       isLeaf: isLeaf ? "true" : "false", 
       expanded: "false" 
      } 
      i++; 
     } 
     $("#tree")[0].addJSONData({ 
      Total: 1, 
      Page: 1, 
      Records: 2, 
      Rows: rows 
     }); 
    } 
}; 

請注意,有很多的選項,你如何做到這一點,我的例子只有一個。

我會得到JSON成JS變種的方法是兩種:

  1. 寫HTML輔助發射一個短腳本的頁面。
  2. 編寫一個操作,如果由於某種原因無法將數據內聯,則返回JavaScriptResult以獲取文件中的數據。

您使用.NET JavaScript序列化程序創建JSON。以MVC源代碼中的JsonResult.ExecuteResult爲例。

+0

我看到JsonResult.ExecuteResult直接輸出到ASP.NET響應緩衝區。所以我必須在我想讓它在視圖中發射的時候調用它,對吧? – RationalGeek

+0

不要*使用*'JsonResult.ExecuteResult'。我只是將它作爲使用內置JSON序列化程序的示例。親自使用它,並根據需要隨字符串做任何事情。 –

1

請參閱jqGrid文檔wiki中的Data Manipulation頁面。在那裏你會找到很多方法將數據提供給網格。