web-dev-qa-db-fra.com

Comment utiliser les balises <% = ASP.NET dans les attributs de contrôle du serveur?

Cela marche:

<span value="<%= this.Text %>" />

Cela ne fonctionne pas:

<asp:Label Text="<%= this.Text %>" runat="server" />

Pourquoi donc?

Comment puis-je faire fonctionner correctement le deuxième cas, c'est-à-dire définir le texte de l'étiquette à la valeur de la variable "Texte"?

40
Joao Silva

Je ne sais pas comment le marquer comme tel, mais c'est un peu un doublon. Voir ce fil .

Je ne pense pas que l'intégration de code dans votre balisage rendra votre balisage plus clair ou plus élégant.

6
chevett

Utilisez expressions de liaison de données

<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label>

Code derrière,

protected void Page_Load(object sender, EventArgs e){
  DataBind();
}
54
adatapost

tu peux le faire

 <asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label>
12
user1855575

Dans mon code, j'utilise facilement quelque chose comme ça, mais dans le contrôle de databound comme le modèle d'élément ListView

 <asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' />

Mais quand j'ai essayé d'utiliser en dehors du contrôle de databound en utilisant <% # ..%>, cela ne fonctionne tout simplement pas.

Vous pouvez facilement faire avec

<a href="<%=myHref%>">My href</a> 

Mais pour les contrôles serveur et en dehors du contrôle de databound. Nous devons appeler DataBind () dans l'événement pageload explicitement

<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' >
7
Sachin Kumar

Vous devrez définir la valeur du contrôle serveur dans le code

Tout d'abord, attribuez un ID au contrôle d'étiquette afin que vous puissiez accéder au contrôle

<asp:Label ID="myLabel" runat="server" />

Ensuite, dans votre fonction▶Load, définissez la valeur du champ 'Texte' de vos étiquettes

protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = 'Whatever you want the label to display';
}

Cette fonction sera dans votre code derrière le fichier, ou, si vous n'utilisez pas le code derrière le modèle, dans votre page aspx, vous aurez besoin

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        myLabel.Text = 'Whatever you want the label to display';
    }
</script>

Bonne chance.

7
RR.

<asp:Label> compile au moment de l'exécution et se convertit en balises html. Vous pouvez définir du texte avec codebehind ou comme ceci:

<asp:Label id="Text1" runat="server" />
<% Text1.Text = this.Text;%>

PD: On dirait que ma variante ne fonctionne pas, c'est mieux:

protected void Page_Load(object sender,EventArgs e) 
{
    Text1.Text = this.Text;
}
6
x2.

Juste lancer cette petite pépite pour ceux qui veulent une bonne ventilation technique du problème - https://blogs.msdn.Microsoft.com/dancre/2007/02/13/the-difference-between-and -in-asp-net /

Je pense que le nœud est en assez bon accord avec les autres réponses:

  • Les expressions <% = sont évaluées au moment du rendu
  • Les expressions <% # sont évaluées au moment de DataBind () et ne sont pas évaluées du tout si DataBind () n'est pas appelé.
  • Les expressions <% # peuvent être utilisées comme propriétés dans les contrôles côté serveur. <% = les expressions ne le peuvent pas.
0
Bondolin