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