在DataFormWebPart中动态设置ParameterBinding的DefaultValue

Pet*_*old 6 asp.net sharepoint dataformwebpart parameterbinding

在我在WSS中的自定义aspx页面中,我使用带有xsl文件的DataFormWebPart来呈现一些数据.为了将值传递给xsl,我使用参数绑定.具体来说,我需要传递服务器主机URL,如下所示:

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue="http://hardcoded.com" />
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我要做的下一件事是动态获取主机名.因此,弄清楚如何从SharePoint获取它我添加了以下绑定:

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue='<%# SPContext.Current.Site.Url.Replace
       (SPContext.Current.Site.ServerRelativeUrl, "") %>' />
Run Code Online (Sandbox Code Playgroud)

现在来问题了.如果在页面中使用其他位置,代码将按预期工作,但使用上述代码SharePoint报告:

Web部件错误:'WebPartPages:DataFormWebPart'的'ParameterBindings'属性不允许子对象.

有人对此有所了解吗?

更新:我已根据本文启用了服务器端代码

Pet*_*old 5

好吧,我找到了一个不那么优雅的解决方案,但它确实有效.

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

ParameterBinding Location属性指的是从中获取值的位置.像这样的文章的"控制()"选项的提示.所以将参数绑定更改为:

<ParameterBinding
  Name="HttpHost"
  Location="Control(MyHttpHost, Text)"
  DefaultValue="" />
Run Code Online (Sandbox Code Playgroud)

并将以下代码添加到我的页面:

<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>
Run Code Online (Sandbox Code Playgroud)

......实际上做了伎俩!

为了从附带的XSL文件中获取参数值,我将param元素放在根元素中.param name属性必须与ParameterBinding:

<xsl:stylesheet ...>
    ...
    <xsl:param name="HttpHost"/>
Run Code Online (Sandbox Code Playgroud)

然后可以将该参数引用为任何其他XSL变量.