asp.net 动态设置DataFormWebPart中的参数绑定的DefaultValue

dced5bon  于 2023-01-10  发布在  .NET
关注(0)|答案(1)|浏览(124)

在我的WSS自定义aspx页面中,我使用DataFormWebPart和XSL文件来呈现一些数据。为了将值传递给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”属性不允许使用子对象。
有人对此有什么看法吗?
我已经根据SharePoint 2007: using ASP.NET server side code in your pages启用了服务器端代码

zte4gxcn

zte4gxcn1#

在尝试了各种操作ParameterBindings属性的方法都没有成功之后,我想到了如何使用Location属性获取其中的动态值。
ParameterBindingLocation属性表示从哪里获取值。类似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变量引用。

相关问题