我有来自某个位置的过滤器(让我们说,查询字符串):
<ParameterBinding Name="param" Location="QueryString(param)"/>
我知道如何将该参数传递给CAML查询,如下所示:
<Where>
<Eq>
<FieldRef Name='SomeField'/>
<Value Type='Text'>{param}</Value>
</Eq>
</Where>
但是,如果没有提供参数,我什么也得不到(SomeField =&#39;&#39;)。
我想知道:CAML中是否可以将参数作为字段值?例如,我知道这不起作用,但你明白了:
<Where>
<Or>
<Eq>
<FieldRef Name='SomeField'/>
<Value Type='Text'>{param}</Value>
</Eq>
<Eq>
<FieldRef Formula='{param}'/>
<Value Type='Text'></Value>
</Eq>
</Or>
</Where>
我知道根据CAML架构,它似乎不可能。这样,我就可以进行真正的服务器端过滤。 XSL的替代方案是客户端,这意味着将检索更多必要的记录。
是的,我知道我可以通过编程方式执行此操作,但这不是我的意图。我希望使用XsltListViewWebPart。
有什么想法?任何替代方案?
答案 0 :(得分:0)
知道了:
<Where>
<Or>
<Geq>
<FieldRef Name='SomeField'/>
<Value Type='Number'>{param}</Value>
</Geq>
<Contains>
<FieldRef Name='Author'/>
<Value Type='Text'><![CDATA[{param}]]></Value>
</Contains>
</Or>
</Where>
诀窍是在第二个条件下有一些真实的东西。在这种情况下,如果未提供{param},则它将为'',因此它将包含在Author(Created By)字段中,该字段始终不为空。问题是我必须用{param}包围,否则它将不起作用。