Il problema che cerca di risolvere la classe che vi presento è quello di rendere possibile che una proprietà di un controllo che prevede l'URL di una immagine sia valorizzata con l'URL di una immagine contenuta nel tema corrente.
In parole povere:
<img src="Images/immagine.gif" />
dove Images/immagine.gif deve essere preso dalla cartella Images del tema corrente e non dalla cartella Images della root.
Per risolvere il problema ho realizzato un semplice Expression Builder, di seguito riportato:
<ExpressionPrefix("ThemeImage")> _ Public Class ThemeImageExpressionBuilder Inherits System.Web.Compilation.ExpressionBuilder Public Overrides Function GetCodeExpression(ByVal entry As System.Web.UI.BoundPropertyEntry, _ ByVal parsedData As Object, _ ByVal context As System.Web.Compilation.ExpressionBuilderContext) As System.CodeDom.CodeExpression Dim metodo As CodeMethodInvokeExpression = New CodeMethodInvokeExpression() metodo.Method.TargetObject = New CodeTypeReferenceExpression("ThemeImageExpressionBuilder") metodo.Method.MethodName = "GetAbsoluteImageURL" metodo.Parameters.Add(New CodePrimitiveExpression(entry.Expression)) Return metodo End Function ''' Restituisce il path dell'immagine comprensivo di tema Public Shared Function GetAbsoluteImageURL(ByVal relativeImageURL As String) As String Dim retURL As String = String.Empty If TypeOf HttpContext.Current.Handler Is UI.Page Then Dim page As UI.Page = CType(HttpContext.Current.Handler, UI.Page) Dim themeName As String = page.Theme If themeName <> "" Then retURL = System.IO.Path.Combine("~/App_Themes/" + themeName, relativeImageURL) Else retURL = relativeImageURL End If End If Return retURL End Function Public Overrides ReadOnly Property SupportsEvaluate() As Boolean Get Return True End Get End Property End Class
L'Expression Builder va configurato all'interno del web.config, in questo modo:
<compilation> <expressionBuilders> <add expressionPrefix="ThemeImage" type="ThemeImageExpressionBuilder"/> </expressionBuilders> </compilation> D'ora in poi sarà possibile scrivere nella pagine usando una sintassi come questa: <img src="<%$ ThemeImage: Images/immagine.gif %>" />
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.