2009-03-12 15 views
3

Warum zeigt dies nicht das Datum/die Uhrzeit an, wenn gerendert wird?Inline-Code in Webform-Eigenschaft

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

Gibt es trotzdem, dass dies funktioniert?

Antwort

0

Nun werden die ASP-Tags gerendert. Sie müssen die Eigenschaft zur Laufzeit festlegen. oder tun Sie einfach die <%= DateTime.Now.ToString() %>.

4

Asp.net Server Kontrollen spielen nicht gut mit dem <% = stattdessen können Sie tun:

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

Ps. Sie könnten alternativ den Text des Labels auf den Code-Behind setzen. Es könnte für Ihr Szenario funktionieren, es auf PreRenderComplete zu setzen.

0

Das eigentliche Problem hier ist jedoch, muss ich die Eigenschaft eines WebControl mit Code auf der Markup-Seite festlegen. Der einzige Weg, den ich gefunden habe, ist das gesamte Steuerelement in einen Codeblock zu legen. Es ist nicht elegant oder vorgeschlagen, aber wenn alles andere fehlschlägt, wird dies funktionieren.

<% 
     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()); 
    %> 

Aber das wird nicht funktionieren, wenn Sie das Steuerelement benötigen, um den Status beizubehalten.

UPDATE:

Nach Kev Antwort Erforschung ich eine noch bessere Lösung gefunden werden. Ich habe keinen Code (eine MVC-Seite), aber Sie können immer noch auf ein Steuerelement auf der Seite über einen Codeblock verweisen, so dass meine neue Lösung die folgende ist. Hinweis - Sie müssen zuerst den Codeblock platzieren, damit dies funktioniert.

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

Danke für die Inspiration Kev!

+0

In diesem Fall mag ich immer noch besser, es auf dem Codebehind hinzuzufügen, vielleicht auf der PreRenderComplete (hinzugefügt, dass Kommentar zu meiner Antwort) - oder sogar Render (nicht sicher, ob die Bezeichnung den Wert greifen würde, wenn Sie es vor der Basis setzen .OnRender) – eglasius

+0

@ Chief7 - Sie könnten das MVC-Tag zu der Frage hinzufügen, nur ein Gedanke. – Kev

3

Ich bin mir nicht sicher, ob Sie einen Code hinter Datei haben, aber wenn Sie wirklich den Text Eigenschaft des Labels in dem ASPX-Markup müssen festlegen können Sie den folgenden Code zur Seite hinzufügen:

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

Auf diese Weise können Sie den Status des Label-Steuerelements beim Postback beibehalten.

+0

Ich habe keinen Code hinter oder eine Designer-Datei Dies ist eine MVC-Ansichtsseite, aber danke. – chief7

1

Der einfachste Weg, diese Arbeit zu machen, wäre einen Datenbindungsausdruck anstelle des Codes macht Block ...

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

die Text-Eigenschaft wird nun verwendet wird gesetzt, wenn Page.DataBind() genannt wird, so in Ihrem Code-behind sollten Sie so etwas wie

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

    base.OnPreRender(e); 
} 
+0

BITTE ermutigen Sie die Leute, test.DataBind() und nicht this.DataBind() zu verwenden. Es ist nicht erforderlich, dass alle Steuerelemente die DataBinding-Ereignisse durchlaufen, wenn dies nicht erforderlich ist. – JJS

1

den Code inline Setzen Sie wie unten innerhalb des Tags des Labels,

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