在MVC2中进行Ajax发布时控制JqGrid参数

时间:2012-04-10 15:39:46

标签: jquery asp.net-mvc jqgrid

我对在MVC2中处理ajax post请求的指南行感到困惑 我如何知道网格作为请求参数传递的数据?什么顺序和什么数据类型?因为知道了这一点后只有一个可以设计服务器端邮政方法。我见过很多不同函数原型的例子作为服务器端方法处理程序。

怎么可能?我的意思是它是做ajax帖子的jqgrid。如何为同一个jqgrid提供不同类型的函数原型作为服务器端操作?

修改

我的要求是,当JqGrid执行ajax调用时,我想发送一些额外的数据,如下拉列表选择值。但是MVC只接受JqGrid参数。我有一个解决方法虽然我通过“paramData”添加额外的数据,我能够在控制器请求处理程序中接收它。问题是我们使用一个Grid类来反序列化Grid参数,这个类对于app来说是全局的。因此,为每个页面修改它是一个no。

我需要的是这不起作用只填充第一个参数: -

public void Jgrid(Jgrid grid,object hdnupdpg,string p_roleid)
{
}

但是我如何让Jgrid.ajax调用发送这些其他内容?仅使用“ paramsData ”选项?

这是我遇到的服务器端功能原型:

public void JGridData(JGrid grid)
{

}

这是网格类

    public class JGrid
    {
        private bool IsSearch;
        public string sidx { get; set; }
        public string sord { get; set; }
        public int page { get; set; }
        public int rows { get; set; }

        public bool _search
        {
            get
            {
                string strSearch = HttpContext.Current.Request["_search"];
                if (!string.IsNullOrEmpty(strSearch))
                    return Convert.ToBoolean(strSearch);
                else
                    return IsSearch;
            }
            set { IsSearch = value; }
        }

        public string searchOper { get; set; }
        public string filters { get; set; }
        public int totalRecords { get; set; }
        public string procName { get; set; }
        public string SearchValue { get; set; }
        public string SearchField { get; set; }

        public string defaultFilter { get; set; }

        public string SortExpression
        {
            get { return sidx + " " + sord; }
        }


        public string FilterExpression
        {
            get
            {
                string filter = BuildFilter();
                if (!string.IsNullOrEmpty(defaultFilter) && !string.IsNullOrEmpty(filter))
                    return defaultFilter
                           + " AND (" + filter + ")";
                else if (!string.IsNullOrEmpty(defaultFilter))
                    return defaultFilter;
                return filter;
            }
        }

        public string BuildFilter()
        {
         ....
        }
}

修改

Here is my Script for JqGrid

    jQuery('#jgrid').jqGrid({
        autowidth: true,
        altRows: true,
        altclass: 'grdAltRwClr',
        datatype: 'local',
        forceFit: true,
        gridview: true,
        height: 290,
        mtype: 'post',
        rowList: [10, 20, 30],
        rowNum: 10,
        pager: '#pager',
        pagerpos: 'right',
        recordpos: 'left',
        rownumbers: false,
        scrollrows: false,
        sortname: 'roledtlid',
        toolbar: [true, "top"],
        url: rootPath + 'RoleDetail/JGridData',
        postData: { extraparams: function() { return escape(jQuery('#hdnupdpg').val()); },
        parentid: function() { return escape(jQuery('#p_roleid').val()); }
         },
        beforeSelectRow: function(rowid, e) { return false; },
        gridComplete: function() { GridComplete() },
        colModel: [
              { name: 'act', label: 'View', resizable: false, search: false, sortable: false, title: false, width: 6, index: 'act' }
            , { name: 'roleid', label: 'Role id', width: 10, index: 'roleid' }
            , { name: 'rolename', label: 'Role Name', width: 25, index: 'rolename' }
            , { name: 'pgname', label: 'Page Name', width: 30, index: 'pgname' }
            , { name: 'canedit', label: 'Edit', width: 10, index: 'canedit' }
            , { name: 'canview', label: 'View', width: 10, index: 'canview' }
             ]
    });

2 个答案:

答案 0 :(得分:3)

将发送到服务器的参数列表取决于您使用的选项。您没有发布您使用的 javaScript 代码。您可以根据jqGrid的prmNames选项重新定义的任何参数的名称。以下参数将始终发送到用于填充网格的URL

  • page - 请求的页面 - 默认值page
  • rows - 请求的行数 - 默认值rows
  • sort - 排序列 - 默认值sidx
  • 订单 - 排序顺序默认值sord
  • 搜索 - 搜索指标 - 默认值_search

如果您对参数stringResult: true使用Advanced Searching dialogfilter toolber,则会以here所述格式在附加参数filters中发送有关过滤器的信息。

例如,如果在服务器响应的标头中设置Cache-Control: private, max-age=0(请参阅herehere)或使用服务器响应的其他Cache-Control参数控制缓存您可以删除包含时间戳的nd参数:

prmNames: { nd: null }

如果您想将_search参数重命名为isSearch,例如您可以使用

prmNames: { search: 'isSearch' }

您可以将所需的所有设置组合在一起:

prmNames: { nd: null, search: 'isSearch' }

答案 1 :(得分:2)

目前尚不清楚你对哪种jqgrid方法感兴趣。但是让我试试

一般情况下,您可以使用Firebug for Firefox

查看您感兴趣的请求参数
  • 在Firefox中安装Firebug插件
  • 使用jqgrid打开页面/或打开jqgrid demo页面(如果您还没有)
  • 从Firefox的右上角激活Firebug控制台
  • 在Firebug的“网络”标签中查看请求响应
  • 如果展开请求,则会显示在该特定请求中发送的所有参数和标头信息