在我在WSS中的自定义aspx页面中,我使用带有xsl文件的DataFormWebPart来呈现一些数据。为了将值传递给xsl,我使用参数绑定。具体来说,我需要传递服务器主机URL,如下所示:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue="http://hardcoded.com" />
这很好用,但接下来我要做的是动态获取主机名。因此,弄清楚如何从SharePoint获得它我添加了以下绑定:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue='<%# SPContext.Current.Site.Url.Replace
(SPContext.Current.Site.ServerRelativeUrl, "") %>' />
现在问题。如果在页面中使用其他位置,代码将按预期工作,但使用上述代码SharePoint报告:
Web部件错误:'WebPartPages:DataFormWebPart'的'ParameterBindings'属性 不允许子对象。
任何人都对此有所了解?
更新:我已根据this article
启用了服务器端代码答案 0 :(得分:5)
好的,我找到了一个不那么优雅的解决方案,但它确实有用。
在尝试各种操作ParameterBindings属性的方法没有成功之后,我想到了如何使用Location属性获取动态值。
ParameterBinding
Location
属性指的是从中获取值的位置。文章如this提示“Control()”选项。所以将参数绑定更改为:
<ParameterBinding
Name="HttpHost"
Location="Control(MyHttpHost, Text)"
DefaultValue="" />
并将以下代码添加到我的页面:
<asp:TextBox ID="MyHttpHost" runat="server" Visible="false" />
<script runat="server">
protected void Page_Load()
{
MyHttpHost.Text =
SPContext.Current.Site.Url.Replace(SPContext.Current.Site.ServerRelativeUrl, "");
}
</script>
......实际上已经成功了!
为了从随附的XSL文件中获取参数值,我将param元素放在根元素中。 param name属性必须与ParameterBinding
:
<xsl:stylesheet ...>
...
<xsl:param name="HttpHost"/>
然后可以将该参数引用为任何其他XSL变量。
答案 1 :(得分:2)