我如何将我的视图模型绑定到jqGrid?
使用MVC2和EF框架。 到目前为止,我发现的大多数参考文献/博客文章都将单个表及其数据(有时是分层的)绑定到具有编辑功能的jqGrid。 我不需要这个。 我甚至不需要编辑数据 - 只是显示。 我需要显示和分页数据。 排序是一个加号,我想要搜索奖金。
jqGrid的文档显示绑定的数据源如下:
return gridModel.OrdersGrid.DataBind(northWindModel.Orders);
但是,我只有我的实体上下文没有引用视图模型。 我可以在这里创建一个实体集吗? 对此不太了解。
我所有的视图模型都包含来自多个不同表格的数据 我能做些什么来将视图模型属性绑定到jqGrid? 我正在玩Trirand的30天jqGrid for MVC试用版。 再次,我只需要显示和分页数据,但我不确定如何将视图模型连接到jqGrid数据源。
编辑
public ActionResult test()
{
var gridModel = new testmodel();
var viewModel = gridModel.testgrid;
SetupTestGrid(viewModel);
return View(gridModel);
}
private void SetupTestGrid(JQGrid viewModel)
{
viewModel.ID = "TestGrid";
viewModel.DataUrl = Url.Action("SearchTestGridDataRequested");
viewModel.ToolBarSettings.ShowEditButton = false;
viewModel.ToolBarSettings.ShowAddButton = false;
viewModel.ToolBarSettings.ShowDeleteButton = false;
}
public JsonResult SearchTestGridDataRequested(string sidx, string sord, int page, int rows)
{
var gridModel = new testmodel(sidx, sord, page, rows);
SetupTestGrid(gridModel.testgrid);
return Json(gridModel.datasource);
}
在testmodel和testmodel(参数)中,我创建了一个匿名类型(名为datasource),其中包含Phil Haack的参数; 总计,页面,记录和行。 该属性在SearchTestGridDataRequested的最后一条语句中被JSON化了。
我真的不知道jqGrid的商业版本,但该产品在内部使用了开源jqGrid,因此我可以解释它应该如何与ASP.NET MVC一起使用。
一般来说,在MVC中使用jqGrid,你可以有一个页面(一个View),其中有两个元素<table>
和一个用于分页器的<div>
。 ( <table>
和<div>
)都必须有和id
属性。 没有其他复杂的视图绑定到模型是必需的。
现在你可以在页面的头部加载所需要的所有JavaScript:jQuery,jqGrid和页面特定的JavaScript,它定义了你想要显示的jqGrid,例如列模型和不同的jqGrid参数。 您需要将网格绑定到数据的最重要的参数是url
参数。 例如,如果您在Home
控制器中定义了GetData
操作,则url
可以是"Home/GetData"
或'<%= Url.Content("~/Home/GetData")%>'
。 这就足够了“数据绑定”。 不需要使用模型数据。
动作GetData
可以定义如下:
JsonResult GetData(string sidx, string sord, int page, int rows)
如果您希望仅支持数据排序和分页,但不需要任何搜索(筛选)支持。
在搜索支持的情况下,你需要添加一个额外的参数。 如果要使用带有stringResult:true
参数的高级搜索或工具栏搜索,则应添加一个附加参数string filter
:
JsonResult GetData (string sidx, string sord, int page, int rows, string filter)
如果在网格中实施单字段搜索,应该是
JsonResult GetData (string sidx, string sord, int page, int rows,
string searchField, string searchString, string searchOper)
你也可以做出一个普遍的行动:
JsonResult GetData (string sidx, string sord, int page, int rows, string _search
string searchField, string searchString, string searchOper,
string filter)
因此,在所有情况下,您都必须做几乎相同的事情,但您会以其他形式收到其他参数。
现在您应该决定从哪个表单中为控制器操作提供jqGrid的数据。 jqGrid非常灵活,您可以以标准格式获取数据
{
"total": "xxx", // the total number of pages
"page": "yyy", // the current page number of the data returned
"records": "zzz", // the total number of records
"rows" : [
{"id" :"1", "cell" :["cell11", "cell12", ..., "cell1n"]},
{"id" :"2", "cell":["cell21", "cell22", ..., "cell2n"]},
...
]
}
或以另一种(更可读,但更长)格式。 在最后一种情况下,您将不得不定义一个小参数jsonReader
来描述数据应该如何读取(参见文档)。
如果你仔细看看这样的一些旧的答案,这个,这个或这个,你会发现足够的代码片段的完整工作的MVC项目,你可以修改你的建议。 列表中的第一个参考应该给出希望的答案,主要问题是如何从EF源或任何其他IQueryable<T>
源数据准备jqGrid需要的数据。
在另一个我的旧回答中,我描述了一般模式如何在MVC环境中使用jqGrid更加详细,但对于测试已有不同实现方式的人员。
链接地址: http://www.djcxy.com/p/25945.html