6

在 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”属性不允许子对象。

有人对此有意见吗?

更新:我根据这篇文章启用了服务器端代码

4

2 回答 2

5

好的,我找到了一个不太优雅但有效的解决方案。

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

属性是指从ParameterBinding Location哪里获取值。此类文章暗示了“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 变量进行引用。

于 2009-03-05T11:05:32.517 回答
2

使用服务器变量可能更有意义: http: //mdasblog.wordpress.com/2007/10/19/data-view-web-part-parameters-based-on-server-variables/

于 2010-02-07T14:29:26.953 回答