【发布时间】:2016-03-09 21:47:24
【问题描述】:
如果参数不存在,如何使绑定到请求参数的查询过滤器不活动?
例如:我有一个查询MyQuery,可以通过投影MyProjection 访问。我在该查询中添加了一个过滤器,我说MyDate 字段应该等于{Request.QueryString:MyDate}。我希望像 ~/MyProjection?MyDate=2016-03-08 这样的 URL 按给定值过滤内容项,但 url ~/MyProjection 只是不按该字段过滤。但这不是发生的情况:无论如何都会将条件添加到查询中,并且其形式为“[minimum DateTime value] < MyDate < [maximum DateTime value]”。这不好,因为它会过滤掉具有 NULL 值的字段。如果我尝试对数字字段做同样的事情,那就更糟了,因为当参数不存在时它会抛出异常。
我知道我可以创建一个新的查询和投影来获得不同的选项,但这似乎有点矫枉过正 - 而且,如果我想创建一个高级搜索表单,它必须以单个投影为目标。
有没有“官方”的方式来做到这一点?还是解决方法?还是 Orchard 根本不支持?
【问题讨论】:
-
我现在不知道任何官方消息,但作为一种快速解决方法,您可以编写自己的令牌,例如 {Request.QueryStringWithFallback:MyDate} ,例如,如果插入 DateTime.MinValue查询字符串中没有值。
-
有趣的想法...我不确定它是否会让我超过 NULL 值,但这种方法在某些情况下肯定会很有用。并且令牌似乎是 Orchard 中最容易扩展的点之一。