2009-03-04 13 views
6

En mi página aspx personalizada en WSS estoy usando un DataFormWebPart con un archivo xsl para representar algunos datos. Para pasar valores a xsl, utilizo enlaces de parámetros. Específicamente, necesito pasar en la url host de servidor de la siguiente manera:Establezca dinámicamente el DefaultValue de un ParameterBinding en un DataFormWebPart

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

Esto funciona bien, pero lo siguiente que quiero hacer es conseguir que el nombre de host de forma dinámica. Para averiguar cómo obtenerlo de SharePoint, agregué el siguiente enlace:

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

Ahora al problema. El código funciona como se esperaba si se utiliza algún otro lugar de la página, pero con los anteriores informes de código de SharePoint:

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

Alguien tiene una opinión sobre esto?

Actualización: He permitido código del lado del servidor de acuerdo con this article

Respuesta

5

Bueno, he encontrado una solución que no es tan elegante, pero funciona.

Después de probar varios métodos de manipulación de la propiedad ParameterBindings sin éxito, pensé en cómo podría obtener el valor dinámico allí utilizando el atributo Ubicación.

El atributo ParameterBindingLocation se refiere a dónde recuperar el valor. Artículos como this consejos de la opción "Control()". Por lo que cambiar el parámetro de unión a:

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

y añadiendo el siguiente código a mi página:

<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 realidad hizo el truco!

Para acceder a los valores de los parámetros desde el archivo XSL adjunto, coloco elementos param en el elemento raíz. El atributo param name debe coincidir con el de la ParameterBinding:

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

El parámetro a continuación, puede hacer referencia como cualquier otra variable XSL.

Cuestiones relacionadas