VB.NET : ExpressionBuilder per recuperare le immagini all'interno del tema corrente.
Il problema che cerca di risolvere la classe che vi presento è il seguente: supponiamo di volere 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 della pagina aspx.
In parole povere:
<img src="Images/immagine.gif" />
dove Images/immagine.gif
deve essere presa dalla cartella Images
del tema corrente e non dalla cartella Images
della root.
Per risolvere il problema ho realizzato un semplice Expression Builder:
<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
Configurando l'utilizzo di questo ExpressionBuilder all'interno del web.config:
<compilation debug="true">
<expressionBuilders>
<add expressionPrefix="ThemeImage" type="ThemeImageExpressionBuilder"/>
</expressionBuilders>
Possiamo scrivere, all'interno delle nostre pagine aspx:
<img src="<%& ThemeImage: Images/immagine.gif %>" />
Nessun commento:
Posta un commento