2009-12-14 118 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页面。在那里你会找到很多方法将数据提供给网格。