2009-03-04 3 views
6

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.

誰もがこの上のテイクを持っていますか?

アップデート:私は、[OK]をthis article

答えて

5

に応じて、サーバー側のコードを有効にしている、私はそのエレガントではありませんが、それが動作する解決策を見つけました。

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変数として参照することができます。サーバー変数の使用

関連する問題