2009-03-04 5 views
6

In meiner benutzerdefinierten Aspx-Seite in WSS verwende ich ein DataFormWebPart mit einer Xsl-Datei, um einige Daten zu rendern. Um Werte an die xsl zu übergeben, verwende ich Parameterbindungen. Insbesondere muß ich wie dies in der Server-Host-URL weitergeben muß:Setzen Sie den DefaultValue einer ParameterBinding in einem DataFormWebPart dynamisch

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue="http://hardcoded.com" /> 

Dies funktioniert gut, aber das nächste, was ich tun möchte, ist dynamisch die Hostnamen zu erhalten. Um herauszufinden, wie man das von SharePoint bekommt, habe ich die folgende Bindung hinzugefügt:

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue='<%# SPContext.Current.Site.Url.Replace 
     (SPContext.Current.Site.ServerRelativeUrl, "") %>' /> 

Jetzt zum Problem. Der Code funktioniert wie erwartet, wenn verwendet einen anderen Platz in der Seite, aber mit den oben genannten Code Sharepoint-Berichten:

Web Part Error: The 'ParameterBindings' property of 'WebPartPages:DataFormWebPart' does not allow child objects.

Wer eine Meinung dazu haben?

Update: Ich habe nach Server-Side-Code aktiviert this article

Antwort

5

Ok, ich fand eine Lösung, die nicht so elegant ist, aber es funktioniert.

Nachdem ich verschiedene Methoden versucht habe, die ParameterBindings-Eigenschaft ohne Erfolg zu manipulieren, habe ich mir überlegt, wie ich den dynamischen Wert mit dem Location-Attribut dorthin bringen könnte.

Das Attribut ParameterBindingLocation bezieht sich auf den Wert, von dem der Wert abgerufen werden soll. Artikel wie this Hinweise der "Control()" Option. So ändert den Parameter Bindung an:

<ParameterBinding 
    Name="HttpHost" 
    Location="Control(MyHttpHost, Text)" 
    DefaultValue="" /> 

und das Hinzufügen von dem folgenden Code auf meine Seite:

<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> 

... hat eigentlich den Trick!

Um zu den Parameterwerten innerhalb der zugehörigen XSL-Datei zu gelangen, setze ich param-Elemente in das Wurzelelement. Das param name-Attribut muss, dass die ParameterBinding entspricht:

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

Der Parameter kann dann wie jedes anderes XSL-Variable referenziert werden.

Verwandte Themen