• Aucun résultat trouvé

Puis-je afficher un UserControl directement dans mon navigateur ?

Comment déclarer mon contrôle utilisateur pour qu'il soit déclaré dans toutes mes pages ?

Auteurs : nico-pyright(c) ,

Cela se passe dans le web.config, à la section pages/controls.

<system.web>

<pages>

<controls>

<add tagPrefix="cc1" src="~/controls/ctl1.ascx" tagName="monUc"/>

</controls>

</pages>

</system.web>

A utiliser ainsi dans une page :

<cc1:monUc ID="MonUserControl" runat="server" />

Puis-je afficher un UserControl directement dans mon navigateur ?

Auteurs : Didier Danse ,

Non ce n'est pas possible. Un user control est prévu pour être ajouté dans une Webform (.aspx).

Pour le visualiser, vous devez donc l'ajouter à une page web et afficher cette page dans le browser.

Sommaire > WebForms > Scriptlets

Qu'est-ce que le scriptlet d'instructions <% instruction %> ?

Auteurs : nico-pyright(c) ,

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

Qu'est-ce que le scriptlet d'expressions systèmatiques <%= expression %>?

Auteurs : nico-pyright(c) ,

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<%# expression %>?

Qu'est-ce que le scriptlet d'expressions liées<%# expression %>?

Auteurs : nico-pyright(c) ,

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 Qu'est-ce que le scriptlet d'expressions systèmatiques <%= expression %>?.

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.

Qu'est-ce que le scriptlet d'expressions analysées <%$ expression %>?

Auteurs : nico-pyright(c) ,

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 %>

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>

Comment créer une expression personnalisées <% $expression %> ?

Auteurs : nico-pyright(c) ,

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 :

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

Sommaire > WebForms > Evénements

Documents relatifs