首页 文章

在Asp.net mvc中的jqGrid中添加自己的搜索参数

提问于
浏览
3

我刚刚开始研究asp.net mvc和jqgrid .

我有一个日历,它返回一个日期,一个多选列表框,并在网格外应用过滤器按钮 . 有没有办法根据所选日期和多个选定值将这些过滤器值传递给服务器端actionresult GridData(),并在分页或排序时保持这种值 .

public ActionResult GridData(string sidx,string sord,int?page,int?rows,Collection categoryOptions,string fromDate)

谢谢!

2 回答

  • 1

    是的,您可以使用postData属性为每个请求发送其他过滤器参数 . 请注意,这仅适用于使用JSON填充网格的情况 . 只需要一个返回JsonResult的动作 .

    在你的jqgrid配置包括:

    postData: {
       startDate: function() { return $('#startDate').val(); },
       anotherFilter: function() { return $('#anotherFilter').val(); }
    }
    

    对于你的应用过滤器按钮,调用$('#GridName') . trigger('reloadGrid') . 或者,我喜欢在过滤器改变的任何时候重新加载网格 . 你可以用jquery做到这一点:

    $('#filterName').change(function(){$('#GridName').trigger('reloadGrid');})
    

    您的JSON应该包含jqgrid的这些属性以理解它:

    total = pagedList.PageCount,
    page = pagedList.PageNumber,
    records = pagedList.TotalItemCount,
    rows = pagedList.ToArray()
    
  • 5

    首先,关于参数postData(请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options),您可以向服务器发送其他信息 . 在Should one replace the usage addJSONData of jqGrid to the usage of setGridParam(), and trigger('reloadGrid')?中,您可能还可以找到一些信息,这些信息可以帮助您在jqGrid中刷新数据 .

    在我看来,可能不是jqGrid之外的自定义过滤,标准的数据过滤(搜索)可以帮助您 . 我在一些网页上使用自定义过滤的混合,几乎在任何地方都使用"advanced searching"(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:advanced_searching) . "Advanced searching"是一种为您提供在不同条件下同时搜索多个字段的界面的方法 .

    您的网址将附加:

    ?_search = {_搜索}&页= &行= {行}&SIDX = &SORD = &searchField = &搜索字符串= {搜索字符串}&searchOper = &过滤器= {过滤器}

    你应该更新你的功能原型通讯员 . 来自 filters 的信息是JSON打包对象

    filters = 
        {"groupOp":"AND",
         "rules":[
           {"field":"invdate","op":"ge","data":"2007-10-06"},
           {"field":"invdate","op":"le","data":"2007-10-20"}, 
           {"field":"name","op":"bw","data":"Client 3"}
          ]
        }
    

    要分析来自过滤器的信息,我个人使用 DataContractJsonSerializer . 代码片段是:

    MemoryStream ms = new MemoryStream (Encoding.Unicode.GetBytes (filters));
    DataContractJsonSerializer serializer = new DataContractJsonSerializer (typeof(jqGridSearchFilter));
    ms.Position = 0;
    
    jqGridSearchFilter searchFilter = (jqGridSearchFilter)serializer.ReadObject (ms);
    string groupOp = null;
    if (!String.IsNullOrEmpty(searchFilter.groupOp) &&
        String.Compare (searchFilter.groupOp, "AND", StringComparison.Ordinal) == 0)
        groupOp = "AND";
    else if (!String.IsNullOrEmpty(searchFilter.groupOp) &&
             String.Compare (searchFilter.groupOp, "OR", StringComparison.Ordinal) == 0)
        groupOp = "OR";
    else {
        arSearchStringParameters = null;
        return null;
    }
    for (int i=0; i "WHERE ".Length)
            sb.Append (groupOp);
        AppendWhere (sb, _search,
            searchFilter.rules[i].field, searchFilter.rules[i].op, searchFilter.rules[i].data,
            arColumnInfos, parameters);
    }
    

    哪里

    internal enum GroupOperation {
        AND,
        OR
    }
    
    [DataContract]
    internal class jqGridSearchFilterItem {
        [DataMember]
        internal string field = null;
        [DataMember]
        internal string op = null;
        [DataMember]
        internal string data = null;
    }
    
    [DataContract]
    internal class jqGridSearchFilter {
        [DataMember]
        internal string groupOp = null; //GroupOperation groupOp;
    
        [DataMember]
        internal List rules = null;
    }
    

相关问题