2009-02-17 8 views
8

Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas ci-dessous. J'ai besoin de lier la zone de texte à une valeur d'une expression en ligne. On dirait une chose simple non? Mais aucun de ces travaux. Des idées? Merci d'avance.ASP.net Inline Expression Numéro

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 
<asp:textbox id="tbName" runat="server" Text='<%= "test" %>' /> 

Edit: Je dois mentionner que cette page n'a pas de code derrière et que les directives suivantes en haut.

<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Page Language="C#" %> 

Edit:

La seule solution viable que je pouvais arriver à court d'ajouter un code est derrière l'ajout d'un script serveur en ligne, comme celui-ci. Je voudrais savoir pourquoi les expressions en ligne ne fonctionneront pas, sauf si vous êtes dans un contexte de liaison de données.

<script language="C#" runat="server"> 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     tbName.Text = "test"; 
    } 
</script> 

Répondre

14

Dans le Page_Load vous devrez faire un appel à la page .DataBind() pour

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 

de travailler.

<% =%> est une réponse.Écrite() raccourcie et n'est jamais valide en tant qu'attribut pour une étiquette de serveur.

<% #%> ne peut être utilisé que si le conteneur est databound (la page dans votre cas).

<% $%> peut être utilisé pour accéder aux données dans les fichiers de ressources.

EDIT: Vous pouvez également jeter un oeil à How to 'bind' Text property of a label in markup qui est une question smimilar.

1
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox> 
+0

ne fonctionne pas, je viens d'obtenir "blocs de code ne sont pas pris en charge dans ce contexte.". Je dois mentionner que ma page n'a pas de code derrière, je ne suis pas sûr que cela compte. – James

2

Essayez d'ajouter runat = "server" aux éléments du serveur. Sinon, cet élément ne sera pas traité sur le serveur.

EDIT: En fait, "c'est correct" que cela ne fonctionne pas; Code <% = ...%> ne peut pas être évalué dans une balise de serveur, que des expressions telles que par exemple <% Ressources $:% h1>

+0

Désolé que ce soit une faute de frappe de ma part les contrôles sont définis sur runat = server et cela ne fonctionne toujours pas. – James

2

Vous pourriez avoir besoin l'espace de noms pour le contrôle TextBox

<%@ Import "System.Web.UI.WebControls" %> 
+0

essayé, et toujours pas de chance. – James

+0

vous pouvez également essayer System.Web.UI. C'est là que la fonction Eval est définie. – Nick

5

Comme indiqué, <% =%> est illégal n'importe où dans une déclaration de contrôle du serveur, sauf lorsque le balisage interne est analysé en tant que contenu (par exemple, < ItemTemplate> dans un répéteur).

<% #%> est une expression valide pour les propriétés de contrôle, car ces expressions seront évaluées lorsque DataBind() est appelée sur le contrôle.

Votre utilisation d'Eval() semble cependant un peu suspecte. Par exemple, Eval() utilisera l'objet Page en cours comme contexte de liaison, ce qui signifie que la valeur de la propriété publique nommée "test" sera liée à l'appel de DataBind(). À moins que vous ayez réellement cette propriété définie sur la classe Page, l'expression n'évaluera jamais rien. Eval() est principalement destiné à être utilisé dans des expressions au sein de contrôles tels que Repeater, GridView, ListView, etc, où il y a une liste d'éléments de données liés à l'aide de modèles, et vous avez besoin d'une méthode pour accéder au propriétés de l'élément de données actuel. Pour toutes les autres commandes, utilisez simplement des expressions de code normales dans une expression de liaison de données: c'est beaucoup plus rapide et plus intuitif qu'Eval(), qui repose sur la réflexion d'exécution.

Si vous voulez une alternative plus intelligente en utilisant <%% en $> syntaxe qui évite les données de liaison tout à fait, rendez-vous ici:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

4

Utilisez <asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />

et mis tbName.DataBind(); en cas de chargement de la page.

Pour ceux qui recherchent plus d'informations sur les expressions en ligne, reportez-vous aux liens suivants.

ASP.net ont les suivantes inline expressions