Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery jqGrid按日期筛选或搜索不工作的客户端_Jquery_Asp.net Mvc_Json_Jqgrid_Asp.net Mvc 3 - Fatal编程技术网

Jquery jqGrid按日期筛选或搜索不工作的客户端

Jquery jqGrid按日期筛选或搜索不工作的客户端,jquery,asp.net-mvc,json,jqgrid,asp.net-mvc-3,Jquery,Asp.net Mvc,Json,Jqgrid,Asp.net Mvc 3,我有一个ASP.NETMVC3页面。在它上面,我有一个表,我使用来自ajax调用的JSON数据将其转换为jqGrid。网格具有以下设置: myGrid = $('#myGrid'); myGrid.jqGrid({ caption: 'My Grid', datatype: 'local', data: data.rows, height: 250, pager: '#myPager', viewrecords: true, colMode

我有一个ASP.NETMVC3页面。在它上面,我有一个表,我使用来自ajax调用的JSON数据将其转换为jqGrid。网格具有以下设置:

myGrid = $('#myGrid');
myGrid.jqGrid({
    caption: 'My Grid',
    datatype: 'local',
    data: data.rows,
    height: 250,
    pager: '#myPager',
    viewrecords: true,
    colModel: [
        ...,
        {
            label: 'blah',
            name: 'blah',
            align: 'left',
            sortable: true,
            editable: false,
            width: 85,
            formatter: 'date',
            sorttype: 'date',
            datefmt: 'm/d/Y',
            formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
        },
        ...
    ]
});

// turn on filter toolbar
myGrid.filterToolbar();
data.rows是从ajax调用返回的。这在所有方面都有效,只有一个例外。我可以为客户端分页,对客户端排序,并按每个字段进行搜索,但我显示colModel的字段除外。此“blah”字段是一个日期字段,它以mm/dd/yyyy格式正确显示日期。但是,当我在工具栏中键入类似11/17/2010的内容并按enter键时,搜索返回0条记录

因此,我深入研究了jqGrid代码,以下是它在搜索之前生成的内容:

{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]}
最后,当它通过每一行并评估现场操作时,eval(m)和p.push(此)行,m是:

(String(this.blah).substr(0,10) == String("11/17/2010"))

基本上,在我看来,它似乎没有认识到该字段是一个日期。它调用parse而不是parseDate。有人知道怎么解决这个问题吗?我知道搜索服务器端很容易,我可以传递那个字符串,解析它,然后bam。但如果可以的话,我想留在客户那边。我能够在Oleg和Tom提供的一些示例中复制这一点,因此这要么是一个问题,要么是我在配置中遗漏了一些东西…

我发现你的问题很有趣,所以我对你的问题加1。因为你发了那条线

(String(this.blah).substr(0,10) == String("11/17/2010"))
在本地搜索过程中,在
eval
中使用我想您会花很多时间来理解本地搜索是如何实现的。因为您看到上面的行(请参见
(String(this.blah).substr(0,10)
)不是应该做的(String(this.blah)的值将是“2010-11-17”而不是“11/17/2010”),所以您可以覆盖jqGrid的相应函数(函数
\u getStr
中的
$.jgrid.from
)并以这种方式解决问题

不久前,我花了很多时间准备了相应的,它演示了这项技术。演示的准备过程如下。在这个问题中,在搜索
'benevise'
的情况下,人们希望找到像
'bénevise'
这样的字符串。因此,必须实现真正的自定义本地搜索。我希望这些信息足够了为您解决您描述的问题

已更新:在我看来,我找到了一个更简单的解决方法。您只需为包含数据的
'blah'
列定义
搜索选项:{sopt:['eq','ne']}
。然后
“bw”
(以开头)将不用于该列。“等于”和“不等于”操作在本地搜索中正常工作


更新2:是我使用
sopt
选项的工作示例。

顺便说一句,jqGrid可以为您进行AJAX调用,因此不需要使用
数据。行
。查看和中的一些链接。我可以继续使用这些链接…实际上,我必须在AJAX调用中包装网格的创建。使用这就是我必须调用GridUnload(),因为我正在动态更新过滤器工具栏中的下拉过滤器。我查阅了文档,没有找到类似触发器(“重新加载工具栏”)的内容。好的,我完成了示例,如果我更改了源数据,它就会起作用。我注意到您使用的数据定义了如下日期“2007-09-01”。我的数据有:新日期(“2007-09-01”)。原因是我的源数据来自ASP.NET MVC,我必须重写JSON.parse以正确解释Microsoft的日期格式:/^\/Date\(\d+)\/$/所以网格没有问题,但是如果能够传入日期对象就好了。我认为唯一需要的更改是在parseDate函数中,添加:if(Object.prototype.toString.call(e)=='[Object Date]'){return e;}谢谢Oleg!