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 ClassL'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 %>" />Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


