2009-03-12 6 views
3

Pourquoi cela n'affiche-t-il pas la date et l'heure lors du rendu?Code en ligne sur la propriété Webform

<asp:Label runat="server" ID="test" Text="<%= DateTime.Now.ToString() %>" ></asp:Label> 

Y a-t-il un moyen de faire fonctionner cela?

Répondre

0

Bien les balises ASP sont restituées. Vous devrez définir la propriété à l'exécution. ou faites simplement le <%= DateTime.Now.ToString() %>.

4

contrôles serveur Asp.net ne jouent pas bien avec le <% =, au lieu que vous pouvez faire:

<span><%= DateTime.Now.ToString() %></span> 

Ps. vous pouvez également définir le texte de l'étiquette sur le code-behind. Cela pourrait fonctionner pour votre scénario pour le définir sur PreRenderComplete.

0

Le vrai problème ici est que je dois définir la propriété d'un WebControl avec du code sur la page de balisage. La seule façon que j'ai trouvé pour faire cela est de mettre tout le contrôle dans un bloc de code. Ce n'est pas élégant ou suggéré, mais quand tout le reste échoue, cela fonctionnera.

<% 
     var stringBuilder = new StringBuilder(); 
     var stringWriter = new StringWriter(stringBuilder); 
     var htmlWriter = new HtmlTextWriter(stringWriter); 
     var label = new Label { Text = DateTime.Now.ToString() }; 
     label.RenderControl(htmlWriter); 
     Response.Write(stringBuilder.ToString()); 
    %> 

Mais cela ne fonctionnera pas si vous avez besoin du contrôle pour maintenir l'état.

MISE À JOUR:

Après avoir étudié la réponse de Kev je ne trouve une solution encore mieux. Je n'ai pas de code derrière (c'est une page MVC) mais vous pouvez toujours référencer un contrôle sur la page via un bloc de code pour que ma nouvelle solution soit la suivante. Remarque - Vous devez d'abord placer le bloc de code pour que cela fonctionne.

<% 
    lblTest.Text = DateTime.Now.ToString(); 
%> 
<asp:label runat="server" ID="lblTest" /> 

Merci pour l'inspiration Kev!

+0

Dans ce cas, je préfère encore l'ajouter sur le codebehind, peut-être sur le PreRenderComplete (ajouté ce commentaire à ma réponse) - ou même Render (pas sûr si le label saisirait la valeur, si vous le définissez avant de faire base .OnRender) – eglasius

+0

@ Chief7 - vous voudrez peut-être ajouter l'étiquette MVC à la question, juste une idée. – Kev

3

Je ne sais pas si vous avez un code derrière le fichier, mais si vous avez vraiment besoin de définir Text propriété de l'étiquette dans le balisage .aspx vous pouvez ajouter le code suivant à la page:

<script runat="server"> 
    protected override void OnPreLoad(EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      this.test.Text = DateTime.Now.ToString(); 
      base.OnPreLoad(e); 
     } 
    } 
</script> 

De cette façon, vous pouvez conserver l'état du contrôle d'étiquette lors de la publication.

+0

Je n'ai pas de code derrière ou un fichier de concepteur c'est une page de vue MVC, mais merci. – chief7

1

La façon la plus simple de faire ce travail serait d'utiliser une expression de liaison de données en place du code rendu bloc ...

<asp:Label runat="server" ID="test" Text="<%# DateTime.Now.ToString() %>" ></asp:Label> 

maintenant la propriété Text sera définie chaque fois Page.DataBind() est appelé, donc dans votre code-behind vous voulez quelque chose comme

protected override void OnPreRender(EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     DataBind(); 
    } 

    base.OnPreRender(e); 
} 
+0

S'IL VOUS PLAÎT encourager les gens à utiliser test.DataBind() et non this.DataBind(). Il n'est pas nécessaire que tous les contrôles passent par les événements DataBinding s'ils ne sont pas nécessaires. – JJS

1

Mettre le code en ligne dans l'étiquette de l'étiquette ci-dessous,

< asp:Label ID="Lbl" runat="server" Text=""> 
<%= DateTime.Now.ToString() %> 
< /asp:Label> 
Questions connexes