代码之家  ›  专栏  ›  技术社区  ›  Peter Lillevold Rene

在dataformWebPart中动态设置参数绑定的默认值

  •  6
  • Peter Lillevold Rene  · 技术社区  · 16 年前

    在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

    2 回复  |  直到 15 年前
        1
  •  5
  •   Peter Lillevold Rene    15 年前

    好吧,我发现了一个解决方案,它不是那么优雅,但很有效。

    在尝试了各种不成功地操作参数绑定属性的方法之后,我想到了如何使用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属性必须与 参数绑定 :

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

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