我如何将我的视图模型绑定到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

上一篇: How can I bind my view model to a jqGrid?

下一篇: calling ajax enabled web service