2009-09-08 53 views
36

Esto funciona:¿Cómo se usan las etiquetas ASP.NET <% = en los atributos de control del servidor?

<span value="<%= this.Text %>" /> 

Esto no funciona:

<asp:Label Text="<%= this.Text %>" runat="server" /> 

¿Por qué?

¿Cómo puedo hacer que el segundo caso funcione correctamente, es decir, establecer el texto de la etiqueta en el valor de la variable "Texto"?

+0

posible duplicado de [¿Por qué conducirán <%= %> expresiones como valores de las propiedades en un servidor de controles a un errores de compilación? ] (http://stackoverflow.com/questions/370201/why-will-expressions-as-property-values-on-a-server-controls-lead-to-a-co) – zzzzBov

Respuesta

5

No estoy seguro de cómo marcar esto como tal, pero esto es un poco de un duplicado. See this thread.

No creo que la incrustación de código en su marcado realmente hará que su marcado sea más claro o más elegante.

+2

Último comentario: pensaría ese ajuste algo así como el texto para un botón a una variable simple o función tiene más sentido en el marcado que en el código detrás. Especialmente si tiene muchos botones configurados con text = "literal", pero uno o dos necesitan algún código, es molesto que la mayoría esté configurada en el marcado, pero las excepciones están en el código subyacente. Ahora no solo tengo que mirar en dos lugares para ver los valores de texto, sino que tengo que buscar para encontrar el lugar en el código detrás. Ciertamente no pondría diez páginas de código en el marcado, pero un simple "texto = <% = foo.bar% > parece muy útil. Lo que sea. – Jay

+1

En el mundo real, a menudo conseguir algo que funciona triunfa haciendo que algo sea más claro o más elegante –

7

<asp:Label> está compilando en tiempo de ejecución y convirtiendo a etiquetas html. Puede configurar el texto con el código subyacente o de la siguiente manera:

<asp:Label id="Text1" runat="server" /> 
<% Text1.Text = this.Text;%> 

UPD: parece que mi variante no funciona, esto es mejor:

protected void Page_Load(object sender,EventArgs e) 
{ 
    Text1.Text = this.Text; 
} 
6

Usted tendrá que ajustar el valor del control de servidor en el código

en primer lugar, asignar un ID para el control de etiqueta para que pueda acceder al control

<asp:Label ID="myLabel" runat="server" /> 

Luego, en su función Page_Load, establecer el valor de las etiquetas de 'texto' campo

protected void Page_Load(object sender, EventArgs e) 
{ 
    myLabel.Text = 'Whatever you want the label to display'; 
} 

Esta función estará en su código detrás de archivo, o, si no está utilizando el código detrás de modelo, en el interior su página aspx necesitará

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     myLabel.Text = 'Whatever you want the label to display'; 
    } 
</script> 

Buena suerte.

44

Uso Data binding expressions

<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label> 

Código atrás,

protected void Page_Load(object sender, EventArgs e){ 
    DataBind(); 
} 
7

En mi código que estoy utilizando algo como esto con facilidad, pero en el control de enlace de datos como plantilla ListView artículo

<asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' /> 

Pero cuando traté de utilizar fuera del control de enlace de datos utilizando <% #% ..>, se simplemente no funciona.

Usted puede hacer fácilmente con

<a href="<%=myHref%>">My href</a> 

Sin embargo, para los controles de servidor, y fuera del control de enlace de datos.Tenemos que llamar a DataBind() en el evento pageload explícitamente

<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' > 
12

usted puede hacer esto

<asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label> 
+1

Esta debería ser la respuesta aceptada. No se requiere enlace de datos. – JohnOpincar

Cuestiones relacionadas