1

如果参数不存在,如何使绑定到请求参数的查询过滤器不活动?

例如:我有一个MyQuery可以通过投影访问的查询MyProjection。我在该查询中添加了一个过滤器,我说该MyDate字段应该等于{Request.QueryString:MyDate}. 我希望 URL 喜欢~/MyProjection?MyDate=2016-03-08按给定值过滤内容项,但 url~/MyProjection只是不按该字段过滤。但这不是发生的情况:无论如何都会将条件添加到查询中,并且它的形式为“ [minimum DateTime value] < MyDate < [maximum DateTime value]”。这不好,因为它会过滤掉具有 NULL 值的字段。如果我尝试对数字字段执行相同的操作,情况会更糟,因为当参数不存在时它会引发异常。

我知道我可以创建一个新的查询和投影来获得不同的选项,但这似乎有点矫枉过正——而且,如果我想创建一个高级搜索表单,它必须以单个投影为目标。

有没有“官方”的方式来做到这一点?还是解决方法?或者这在 Orchard 中根本不支持?

4

1 回答 1

1

我不知道开箱即用的方法。但是,您可以通过实现IFilterProvider.

看看 Orchard.Projections 模块。在那里您可以找到许多默认查询过滤器(包括您引用的日期字段过滤器)。如果您只需要处理特定案例,您的可能会更简单。

对于一个非常简单的示例,请查看 Orchard.Tags 模块(查看projections 文件夹)。此文件夹的内容将为您提供开始创建自己的样板所需的几乎所有样板。只需插入您自己的逻辑即可。

于 2016-03-09T13:47:24.267 回答