在DataFormWebPart中动态设置ParameterBinding的DefaultValue

问题描述:

在我的WSS自定义aspx页面中,我使用带有xsl文件的DataFormWebPart来呈现一些数据。为了将值传递给xsl,我使用参数绑定。具体而言,我需要在服务器主机URL这样的经过:在DataFormWebPart中动态设置ParameterBinding的DefaultValue

<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 Part Error: The 'ParameterBindings' property of 'WebPartPages:DataFormWebPart' does not allow child objects.

任何人有这样的走?

更新:我已经根据this article

确定启用服务器端代码,我发现了一个解决方案,是不是优雅,但它的工作原理。

在尝试了各种操纵ParameterBindings属性而没有成功的方法之后,我想到了如何使用Location属性获得动态值。

ParameterBindingLocation属性是指从哪里获取值。像“控制()”选项this提示。因此,改变参数绑定到:

<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 NAME属性必须匹配ParameterBinding的:

<xsl:stylesheet ...> 
    ... 
    <xsl:param name="HttpHost"/> 

参数然后可以作为任何其他XSL变量被引用。

+0

的URL我会同意,所以+1的具体情况。但是我的答案也适用于希望传入xsl的任何其他值。 – 2010-02-08 08:03:58