jqGrid GET 和 POST MVC 中的 mtype

Posted

技术标签:

【中文标题】jqGrid GET 和 POST MVC 中的 mtype【英文标题】:jqGrid GET and POST mtype in MVC 【发布时间】:2013-05-01 15:52:29 【问题描述】:

我刚刚读到 jqGrid 中的 mtype 选项将决定我们将如何进行 ajax 调用。 GET 将检索数据,POST 将发送数据。

当我加载我的 jqGrid 时,我想在我的 js 文件中将一个额外的参数传递给我的控制器:

url: 'Controller/Action1',
mtype: 'POST',
datatype: 'json',
postData:  ParentId:  selectedParentId ,

在我的控制器中,我有这个:

public JsonResult Action1(ParentId)

 // Retrieve child properties from db using ParentId
 // Return json result

    如果我的 mtype 是 POST,我的 jqGrid 将如何加载返回的 json 数据? 在我的操作中,我是否还能将 jqGrid 的其他选项作为参数,如排序顺序、选择的页面大小?我可以在我的操作中使用this.Request.Param["sidx"] 之类的东西吗?

【问题讨论】:

【参考方案1】:

    mtype 选项定义了 HTTP 请求的类型:

    如果设置为 GET(默认情况下):请求参数附加在地址栏中的 http 查询中,如下所示 .../Controller/Action1?ParentId=selectedParentId 如果设置为POST,发送http查询时隐藏请求参数 实际上,这两种方法以不同的方式发送相同的参数。因此,使用 GET 或 POST 方法加载返回的 JSON 数据有任何不同

    当然,您也可以将 jqGrid 的其他选项作为排序顺序等参数获取

对不起我的英语不好

【讨论】:

【参考方案2】:

在您的控制器中,您将获取 jqGrid 传递给您的所有参数:

public ActionResult GetGridData(string sidx, string sord, int page, int rows, bool _search, string filters, string ParentId)

 ....
 int totalRecords = wholeList.Count();
 var pagedQuery = wholeList.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows).ToList();

        var jsonData = new
        
            total = (totalRecords + rows - 1) / rows,
            page = page,
            records = totalRecords,
            rows = (
            from tempItem in pagedQuery
            select new
               
                cell = new string[] 
                    tempItem.ToString(),
                    ...


               
            ).ToArray()

 return Json(jsonData, JsonRequestBehavior.AllowGet);

您可以使用额外的参数来更改您反馈给 jqGrid 的内容,您还将看到您正在传入并使用这些参数来处理分页。

【讨论】:

以上是关于jqGrid GET 和 POST MVC 中的 mtype的主要内容,如果未能解决你的问题,请参考以下文章

如何使用asp.net mvc删除jqgrid中的多个寄存器?

将 JqGrid 值发布到 MVC 控制器

无法在 asp.net mvc 4 中将 JSON 对象映射到 JqGrid

jqGrid Select 不更新 onchange (C# MVC)

如何使用格式化程序将参数发送到操作:MVC 中 jqGrid 4.6.0 中的“showlink”

asp.net mvc中html.Action问题