Imposta dinamicamente DefaultValue di un ParameterBinding in un DataFormWebPart
-
03-07-2019 - |
Domanda
Nella mia pagina aspx personalizzata in WSS sto usando un DataFormWebPart con un file xsl per il rendering di alcuni dati. Per passare i valori all'xsl utilizzo i bind dei parametri. In particolare, devo passare l'URL dell'host del server in questo modo:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue="http://hardcoded.com" />
Funziona bene, ma la prossima cosa che voglio fare è ottenere dinamicamente il nome host. Quindi, per capire come ottenerlo da SharePoint, ho aggiunto la seguente associazione:
<ParameterBinding
Name="HttpHost"
Location="CAMLVariable"
DefaultValue='<%# SPContext.Current.Site.Url.Replace
(SPContext.Current.Site.ServerRelativeUrl, "") %>' />
Ora al problema. Il codice funziona come previsto se utilizzato in un'altra posizione della pagina, ma con il codice sopra riportato Rapporti SharePoint:
Errore web part: la proprietà 'ParameterBindings' di 'WebPartPages: DataFormWebPart' non consente oggetti figlio.
Qualcuno ha un'idea di questo?
Aggiornamento: ho abilitato il codice lato server in base a questo articolo
Soluzione
Ok, ho trovato una soluzione che non è così elegante ma funziona.
Dopo aver provato vari metodi per manipolare la proprietà ParameterBindings senza successo, ho pensato a come ottenere il valore dinamico lì usando l'attributo Location.
L'attributo ParameterBinding
Location
si riferisce a dove recuperare il valore. Articoli come questo suggerimenti di " Control () " opzione. Quindi cambiando il parametro vincolante in:
<ParameterBinding
Name="HttpHost"
Location="Control(MyHttpHost, Text)"
DefaultValue="" />
e aggiungendo il seguente codice alla mia pagina:
<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>
... in realtà ha fatto il trucco!
Per accedere ai valori dei parametri all'interno del file XSL di accompagnamento ho inserito gli elementi param nell'elemento root. L'attributo param name deve corrispondere a quello di ParameterBinding
:
<xsl:stylesheet ...>
...
<xsl:param name="HttpHost"/>
È quindi possibile fare riferimento al parametro come qualsiasi altra variabile XSL.
Altri suggerimenti
L'uso delle variabili server probabilmente ha più senso: http: / /mdasblog.wordpress.com/2007/10/19/data-view-web-part-parameters-based-on-server-variables/