0
我有一些位置来过滤器(比方说,查询字符串):CAML过滤在服务器端
<ParameterBinding Name="param" Location="QueryString(param)"/>
我知道如何给该参数传递给CAML查询,这将是这样的:
<Where>
<Eq>
<FieldRef Name='SomeField'/>
<Value Type='Text'>{param}</Value>
</Eq>
</Where>
但是,如果不提供的参数,我什么也得不到(SomeField = '')。
我想知道:是否有可能在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。
有什么想法?任何替代品?
除非你想(如你自己所建议的)做一些编码,这些情况可以通过使用计算字段来解决,http://social.msdn.microsoft.com/Forums/sharepoint/en-US/3b5f966d-77e3-4470 -b0df-7a28914287cc/caml-query-using-conditions-on-parameters?forum = sharepointdevelopmentlegacy – 2014-10-05 13:28:45
这些情况不能通过计算字段正确解决,因为我必须为每个列表创建一个空的计算字段,这使得它成为非通用解决方案。我知道你发送的链接,这正是我面临的问题。而使用XSLT过滤只发生在“客户端”,这不利于性能。 – 2014-10-05 20:55:18
那你使用什么webpart?如果您使用CQWP,则可以将RenderOnServer = true添加到查询字符串中或实现AlwaysRenderOnServer(http://msdn.microsoft.com/zh-cn/library/microsoft.office.server.search.webcontrols.contentbysearchwebpart.alwaysrenderonserver.aspx?ocid = aff-n-we-loc - ITPRO40936&WT.mc_id = aff-n-we-loc - ITPRO40936) – 2014-10-06 05:40:46