FAQ ASP.NET/VB.NET
FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 juin 2021
- Qu'est-ce que le scriptlet d'instructions <% instruction %> ?
- Qu'est-ce que le scriptlet d'expressions systèmatiques <%= expression %>?
- Qu'est-ce que le scriptlet d'expressions liées<%# expression %>?
- Qu'est-ce que le scriptlet d'expressions analysées <%$ expression %>?
- Comment créer une expression personnalisées <% $expression %> ?
les scriptlets sont des extraits de code figurant dans une page aspx. Ils sont délimités par des marqueurs spécifiques.
Le scriptlet
<
% instruction %>
permet d'éxecuter des instructions dans leur ordre d'appartion dans la page. Elles sont exécutées lors du rendu de la page.
Elles permettent d'imbriquer facilement des instructions dans le code html.
Exemple :
<
% If
(
DateTime.Now.DayOfWeek
=
DayOfWeek.Saturday
Or
DateTime.Now.DayOfWeek
=
DayOfWeek.Sunday
) Then
%>
<
span>
Bon week-
end
...
</
span>
<
%
Else
%>
<
span>
Bonne semaine ...
</
span>
<
%
End
If
%>
les scriptlets sont des extraits de code figurant dans une page aspx. Ils sont délimités par des marqueurs spécifiques.
Le scriptlet
<
%=
expression %>
permet d'évaluer une expression lorsqu'elle apparait dans la page, dans le contexte d'exécution. Il peut s'agir de valeurs littérales, de variables, ou d'appels de méthodes.
Exemple :
<
span>
Nous sommes le : <
%=
DateTime.Now.ToShortDateString
(
) %></
span>
Attention, les expressions systématiques ne fonctionnent pas comme valeur d'attribut. Ainsi la syntaxe suivante :
<
asp:Label runat=
"server"
Text
=
'<%=DateTime.Now.ToShortDateString()'/>
ne fonctionnera pas. Voir Qu'est-ce que le scriptlet d'expressions liées
les scriptlets sont des extraits de code figurant dans une page aspx. Ils sont délimités par des marqueurs spécifiques.
Le scriptlet
<
%# expression %>
permet d'évaluer une expression lorsque la méthode de page ou de contrôle databinding() est appelée. Le principe est quasimement le même que pour les expressions systèmatiques.
Exemple :
<
asp:Label runat=
"server"
Text
=
"<%#DateDuJour %>"
ID=
"MonLabel"
/>
Sachant que dans le code behind, nous aurons (par exemple) :
Protected
ReadOnly
Property
DateDuJour
(
) As
String
Get
Return
String
.Format
(
"Nous sommes le {0}"
, DateTime.Now.ToShortDateString
(
))
End
Get
End
Property
Protected
Overrides
Sub
OnLoad
(
ByVal
e As
System.EventArgs
)
If
Not
IsPostBack Then
MonLabel.DataBind
(
)
End
If
End
Sub
Il faut bien faire attention à appeler correctement la méthode DataBind, lorsque l'on en a besoin.
les scriptlets sont des extraits de code figurant dans une page aspx. Ils sont délimités par des marqueurs spécifiques.
Le scriptlet
<
%$ expression %>
permet d'analyser une expression à la compilation de la page, évaluée à chaque requete.
Ces expressions conviennent bien aux accès aux bases de données par exemple et son evaluées au moment du databind().
Asp.net connait 3 types d'expressions :
- ConnectionString, qui va lire dans la section ConnectionStrings du web.config
- AppSettings, qui va lire dans la section AppSettings du web.config
- Resources, qui lit une entrée dans un fichier de ressources
Exemple :
<
asp:Label runat=
"server"
Text
=
"<%$AppSettings:version%>"
ID=
"MonAppSettingsExpression"
/>
Sachant que dans le web.config nous aurons (par exemple) :
<
appSettings>
<
add key=
"version"
value=
"1.0 alpha"
/>
</
appSettings>
Pour créer une expression personnalisée, il faut hériter de la classe ExpressionBuilder.
On aura aussi un attribut de classe de type ExpressionPrefix qui permettra de faire le lien avec le web.config.
On devra également surchager la méthode GetCodeExpression qui permet de construire un CodeExpression à partir de l'objet CodeMethodInvokeExpression.
Le minimum à implémenter dans cette fonction est de construire cet objet en lui passant le nom de la méthode qui fait l'évaluation :
<
asp:Label runat=
"server"
Text
=
"<%$monexpression:nico-pyright(c)%>"
ID=
"MonLabelExpression"
/>
<
ExpressionPrefix
(
"monexpression"
)>
_
Public
Class
MonExpression
Inherits
ExpressionBuilder
Public
Shared
Function
GetEvaluationString
(
ByVal
expression As
String
) As
Object
Return
String
.Format
(
"Hello : {0}"
, expression)
End
Function
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
Return
New
CodeMethodInvokeExpression
(
New
CodeTypeReferenceExpression
(
MyBase
.GetType
(
)), "GetEvaluationString"
, _
New
CodePrimitiveExpression
(
entry.Expression.Trim
(
)))
End
Function
End
Class
Ici on construit l'objet avec le type de l'expression (le type de la classe) et le nom de la méthode à appeler. Dans le troisième paramètre, on lui passe la valeur de l'expression qui ici vaut "nico-pyright(c)".
Il faudra ensuite définir l'expression personnalisée dans le web.config :
<
compilation debug=
"true"
>
<
expressionBuilders>
<
add expressionPrefix=
"monexpression"
type
=
"testWeb.MonExpression, testWeb"
/>
</
expressionBuilders>
</
compilation>
On utilise toujours la notation namespace.classe, assemblage pour le type. On aura aussi noté la correspondance entre l'expressionPrefix et l'attribut de la classe.
On peut aussi surcharger la méthode GetCodeExpression pour lui passer plus de paramètres, comme le type de l'objet cible (ici un Label) ou le nom de la propriété (ici Text) comme le montre cet exemple de la msdn. Il suffira d'utiliser correctement les éléments CodeDom.
On aura par exemple :
<
ExpressionPrefix
(
"monexpression"
)>
_
Public
Class
MonExpression
Inherits
ExpressionBuilder
Public
Shared
Function
GetEvalData
(
ByVal
expression As
String
, ByVal
target As
Type
, ByVal
entry As
String
) As
Object
Return
String
.Format
(
"Hello : {0}"
, expression)
End
Function
Public
Overrides
Function
GetCodeExpression
(
ByVal
entry As
BoundPropertyEntry, ByVal
parsedData As
Object
, _
ByVal
context As
ExpressionBuilderContext) As
CodeExpression
Dim
type1 As
Type
=
entry.DeclaringType
Dim
descriptor1 As
PropertyDescriptor =
TypeDescriptor.GetProperties
(
type1)(
entry.PropertyInfo.Name
)
Dim
expressionArray1
(
2
) As
CodeExpression
expressionArray1
(
0
) =
New
CodePrimitiveExpression
(
entry.Expression.Trim
(
))
expressionArray1
(
1
) =
New
CodeTypeOfExpression
(
type1)
expressionArray1
(
2
) =
New
CodePrimitiveExpression
(
entry.Name
)
Return
New
CodeCastExpression
(
descriptor1.PropertyType
,
New
CodeMethodInvokeExpression
(
New
CodeTypeReferenceExpression (
MyBase
.GetType
(
)), "GetEvalData"
, expressionArray1))
End
Function
End
Class
Notez que la méthode GetEvalData prends trois paramètres, comme construit pour l'objet CodeMethodInvokeExpression