2009-10-07 12 views
9

¿Alguien me puede explicar esto por favor:¿Por qué no puedo establecer la propiedad asp: Label Text llamando a un método en el archivo aspx?

Tengo una etiqueta y quiero poder establecer la propiedad Text llamando a un método en el archivo aspx. Funciona bien si establezco la propiedad en el código, pero realmente quiero establecer esta propiedad en el archivo aspx.

he intentado un par de cosas, pero lo que esperaba al trabajo fue la siguiente:

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

me sale ningún error al hacer esto, pero mi método nunca es llamado y la propiedad de texto se deja vacía.

¿No es posible establecer valores de propiedades en los controles del lado del servidor directamente en el aspx sin usar recursos o usar valores codificados?

Actualización: Mi primer intento fue:

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

Pero eso da como resultado el siguiente error:

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

Respuesta

12

La sintaxis = <% #% ... > es sintaxis de enlace de datos utilizada para enlazar valores a propiedades de control cuando se llama al método DataBind.

Necesita llamar a DataBind - ya sea Page.DataBind para vincular todos los controles en su página, o Label1.DataBind() para enlazar solo la etiqueta. P.ej. añadir lo siguiente a su controlador de eventos Page_Load:

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

el uso de texto = '<% = GetMyText ('labelText')%>' como otros han propuesto no funcionará como se dará cuenta.Esta sintaxis se hereda de ASP clásico. Se puede usar en algunas circunstancias en ASP.NET para insertar valores dinámicos en HTML estático, pero no se puede usar para establecer las ventajas de los controles del servidor.

+0

Gracias, funcionó perfecto. – GAT

3

El sysntax que busca es <%= %> la # es para el enlace de datos. Así que el código debe leer:

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

EDIT: Este answere es incrrect

Me voy de esta respuesta aquí porque mucha gente está de acuerdo conmigo en que esto es de hecho la respuesta correcta, pero no lo hará trabajo. Esta línea de código producirá la siguiente salida HTML:

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

Lo llamé totalmente. Bastante bueno para no tener ninguna pista sobre ASP y simplemente levantando un archivo de muestra para verificar. – Anthony

+0

Eso también fue mi primer pensamiento. Pero si utilizo la sintaxis "<% =" obtengo el siguiente error: Las etiquetas de servidor no pueden contener construcciones <% ... %>. – GAT

+2

+1. Pásame, pero las citas externas deberán ser comillas simples. como en Texto = '<% = GetMyText ("LabelText")%>' – David

0

Prueba esto:

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

Editar

Sip. Estaba equivocado. @Joe tenía razón.


Sin embargo, esto funciona (y no estoy seguro de cuál es la diferencia):

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

CodeBehind:

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

-1: eso no funcionará - ¡Pruébalo! <%=.. %> no se utiliza para las propiedades de control del servidor. – Joe

+0

Eso es gracioso. Lo uso todo el tiempo. A menos que la pregunta esté redactada de forma incorrecta, esta no es una situación de enlace de datos. – David

+0

@David, he copiado su muestra anterior en un archivo aspx, y el HTML resultante fue "<% = GetMyText (" LabelText ")%>" - es decir, la cadena literal " <% = GetMyText ("LabelText")%> "se usó como propiedad de texto. Si lo usa todo el tiempo, debe estar haciendo algo sutilmente diferente y me gustaría ver qué. – Joe

Cuestiones relacionadas