2009-03-04 9 views
6

Dans ma page ASPX personnalisée dans WSS, j'utilise un DataFormWebPart avec un fichier xsl pour rendre certaines données. Afin de passer des valeurs au xsl, j'utilise des liaisons de paramètres. Plus précisément, je dois passer dans l'URL du serveur hôte comme ceci:Définir dynamiquement la DefaultValue d'un ParameterBinding dans un DataFormWebPart

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

Cela fonctionne très bien, mais la prochaine chose que je veux faire est d'obtenir le nom d'hôte dynamique. Donc, pour comprendre comment obtenir cela de SharePoint, j'ai ajouté la liaison suivante:

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

Maintenant, au problème. Le code fonctionne comme prévu si elle est utilisée d'une autre dans la page, mais les rapports SharePoint de code ci-dessus:

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

Quelqu'un at-il une prise à ce sujet?

Mise à jour: J'ai activé le code côté serveur selon this article

Répondre

5

Ok, je l'ai trouvé une solution qui n'est pas élégante, mais cela fonctionne. Après avoir essayé différentes méthodes de manipulation de la propriété ParameterBindings sans succès, j'ai réfléchi à la façon dont je pourrais obtenir la valeur dynamique à l'aide de l'attribut Location.

L'attribut ParameterBindingLocation fait référence à l'endroit où récupérer la valeur. Des articles comme this indices de l'option "Control()". Donc changer le paramètre de liaison à:

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

et en ajoutant le code suivant à ma page:

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

... en fait fait l'affaire!

Pour obtenir les valeurs de paramètres à partir du fichier XSL associé, je mets des éléments param dans l'élément racine. L'attribut param name doit correspondre à celui de l'ParameterBinding:

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

Le paramètre peut alors être référencé comme toute autre variable XSL.

Questions connexes