2009-10-07 7 views
9

Czy ktoś mógłby mi to wyjaśnić:Dlaczego nie można ustawić właściwości asp: Label Text, wywołując metodę w pliku aspx?

mam etykietę i chcę móc ustawić właściwość Text wywołując metodę w pliku aspx. Działa to dobrze, jeśli ustawię właściwość w kodzie, ale naprawdę chcę ustawić tę właściwość w pliku aspx.

Próbowałem kilka rzeczy, ale czego się spodziewałem do pracy był taki:

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

otrzymuję żadnych błędów, gdy robi to, ale moja metoda nigdy nie jest wywoływana i właściwość Text pozostaje pusta.

Nie można ustawić wartości właściwości na kontrole po stronie serwera bezpośrednio w aspx bez użycia zasobów lub używać wartości zakodowanych?

Aktualizacja: Moja pierwsza próba była:

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

Ale to prowadzi do następującego błędu:

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

Odpowiedz

12

Składnia = <% #% ... > jest Składnia wiązania danych używana do wiązania wartości kontrolujących właściwości po wywołaniu metody DataBind.

Musisz wywołać DataBind - albo PageDataBind, aby powiązać wszystkie kontrolki na twojej stronie, albo Label1.DataBind(), aby powiązać tylko etykietę. Na przykład. dodaj następujące do obsługi zdarzeń Page_Load:

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

Korzystanie text = „<% = GetMyText («tekstetykiety»)%>” jak inni zaproponowali nie będzie działać jak dowiesz się.Ta składnia jest dziedziczona z klasycznej ASP. W niektórych okolicznościach może być używany w ASP.NET do wstawiania dynamicznych wartości w statycznym kodzie HTML, ale nie można go używać do ustawiania właściwości kontrolek serwera.

+0

Dzięki, że działało idealnie. – GAT

3

sysntax szukasz jest <%= %># jest do wiązania danych. Więc kod powinien brzmieć:

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

EDIT: To answere jest incrrect

Wyjeżdżam tę odpowiedź tutaj, ponieważ wiele osób zgodził się ze mną, że to jest rzeczywiście poprawna odpowiedź, ale nie będzie praca. Ta linia kodu będzie następujący wynik HTML:

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

Całkowicie to nazwałem. Całkiem dobrze, że nie mamy pojęcia o ASP i po prostu wyciągamy przykładowy plik do sprawdzenia. – Anthony

+0

To była też moja pierwsza myśl. Ale jeśli używam składni "<% =", pojawia się następujący błąd: Tagi serwera nie mogą zawierać konstruktów <% ... %>. – GAT

+2

+1. Pokonaj mnie, ale zewnętrzne cytaty będą musiały być pojedynczymi cytatami. jak w Text = '<% = GetMyText ("LabelText")%>' – David

0

Spróbuj tego:

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

Edycja

Yep. Myliłem się. @Joe miał rację.


Jednak to działa (i nie jestem pewien, jaka jest różnica):

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

kodzie:

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

-1: to nie zadziała - spróbuj! <%=.. %> nie jest używany do kontroli serwera. – Joe

+0

To zabawne. Używam go cały czas. O ile pytanie nie jest sformułowane w niewłaściwy sposób, nie jest to sytuacja wiążąca. – David

+0

@ David, Skopiowałem twoją próbkę powyżej do pliku aspx, a wynikowy kod HTML był "<% = GetMyText (" LabelText ")%>" - tj. Ciąg literowy " <% = GetMyText ("LabelText")%> "zostało użyte jako właściwość text. Jeśli używasz go przez cały czas, musisz robić coś subtelnie innego i chciałbym zobaczyć, co. – Joe

Powiązane problemy