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

サーバー変数を使用すると、おそらくより理にかなっています

于 2010-02-07T14:29:26.953 に答える