2009-10-07 8 views
9

Quelqu'un peut-il m'expliquer s'il vous plaît:Pourquoi ne puis-je pas définir la propriété asp: Label Text en appelant une méthode dans le fichier aspx?

J'ai un label et je veux être en mesure de définir la propriété Text en appelant une méthode dans le fichier ASPX. Cela fonctionne bien si je place la propriété dans le code derrière, mais je veux vraiment définir cette propriété dans le fichier aspx.

J'ai essayé deux ou trois choses, mais ce que je pensais au travail était la suivante:

<asp:Label ID="Label1" runat="server" Text=<%# GetMyText("LabelText") %> /> 

Je reçois aucune erreur lors de cette opération, mais ma méthode est jamais appelée et la propriété reste vide.

Est-ce qu'il n'est pas possible de définir les valeurs de propriétés directement sur les contrôles côté serveur dans l'ASPX sans utiliser de ressources ou utiliser des valeurs codées en dur?

Mise à jour: Mon premier essai était:

<asp:Label ID="Label1" runat="server" Text=<%= GetMyText("LabelText") %> /> 

Mais qui se traduit par l'erreur suivante:

Server tags cannot contain <% ... %> constructs.

Répondre

12

La syntaxe = <% #% ... > est Syntaxe de liaison de données utilisée pour lier des valeurs à des propriétés de contrôle lorsque la méthode DataBind est appelée.

Vous devez appeler DataBind - soit Page.DataBind pour lier tous les contrôles de votre page, soit Label1.DataBind() pour lier uniquement l'étiquette. Par exemple. ajouter ce qui suit à votre gestionnaire d'événements Page_Load:

if (!IsPostBack) 
    { 
     this.DataBind(); 
     // ... or Label1.DataBind() if you only want to databind the label 
    } 

Utiliser Text = '<% = GetMyText ("LabelText")%>' que d'autres ont proposé ne fonctionnera pas comme vous le saurez.Cette syntaxe est héritée de l'ASP classique. Il peut être utilisé dans certaines circonstances dans ASP.NET pour insérer des valeurs dynamiques en HTML statique, mais ne peut pas être utilisé pour définir les propriétés des contrôles serveur.

+0

Merci, cela a fonctionné parfaitement. – GAT

3

Le sysntax que vous recherchez est <%= %> le # est pour la liaison de données. Donc, votre code devrait lire:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' /> 

EDIT: Ce answere est incrrect

Je quitte cette réponse ici parce que beaucoup de gens d'accord avec moi que c'est enfait la bonne réponse, mais il ne sera pas travail. Cette ligne de code produira la sortie HTML suivant:

<span id="Label1"><%= GetMyText("LabelText") %></span> 
+0

Je l'ai totalement appelé. Assez bon pour n'avoir aucune idée sur ASP et juste en tirant un fichier d'échantillon à vérifier. – Anthony

+0

C'était aussi ma première pensée. Mais si j'utilise la syntaxe "<% =", j'obtiens l'erreur suivante: Les variables de serveur ne peuvent pas contenir de constructions <% ... %>. – GAT

+2

+1. Battez-moi, mais les citations extérieures devront être des guillemets simples. comme dans Text = '<% = GetMyText ("LabelText")%>' – David

0

Essayez ceci:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' /> 

Modifier

Yep. J'avais tort. @ Joe avait raison.


Cependant, cela fonctionne (et je ne suis pas sûr de ce que la différence est):

<asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label> 

CodeBehind:

protected string GetMyText(string input) 
{ 
    return "Hello " + HttpUtility.HtmlEncode(input); 
} 
+0

-1: ça ne marchera pas - Essayez-le! <%=.. %> n'est pas utilisé pour les propriétés de contrôle du serveur. – Joe

+0

C'est drôle. Je l'utilise tout le temps. À moins que la question ne soit mal formulée, il ne s'agit pas d'une situation de liaison de données. – David

+0

@David, j'ai copié votre exemple ci-dessus dans un fichier aspx, et le code HTML résultant était "<% = GetMyText (" LabelText ")%>" - ie la chaîne littérale " <% = GetMyText ("LabelText")%> "a été utilisé comme propriété de texte. Si vous l'utilisez tout le temps, vous devez faire quelque chose de subtilement différent et je serais intéressé de voir quoi. – Joe

Questions connexes