2010-04-19 22 views
7

Me siento un poco tonto al hacer una pregunta tan simple, pero parece que no puedo encontrar una respuesta. Soy nuevo en ASP.NET (C#), pero estoy aprendiendo construyendo un conjunto simple de páginas web que muestran un informe. Tengo una variable que representa el nombre de una empresa. Necesito mostrar esta variable en varios lugares en la página web. La única manera que he encontrado para dar salida a una variable es con:Reutilizar una variable varias veces en una página de ASP.NET

company_name.Text = "Acme Windows"; 

continuación

<asp:literal id="company_name" runat="server" /> 

Mi problema es que quiero utilizar company_name en múltiples lugares de la página. ¿Realmente tengo que crear una variable separada que contenga el mismo valor para cada vez que se coloca en la página? Si solo copio el código XML anterior en todos los lugares en los que quiero mostrar la variable, obviamente crea un error de compilación ya que esa ID ya está definida.

Siento que me falta algo muy obvio.

+0

Es realmente una buena pregunta. –

Respuesta

11

La forma más sencilla de hacerlo es crear una variable de cadena o propiedad en su clase de código subyacente y el uso de la <%= %> notación (abreviatura de Response.Write) para hacerlo en su página en línea:

// You can do this anywhere on your .aspx, as many times as you like. 
<%= this.CompanyName %> 

// Better yet, html encode the value to protect against various threats, 
// such as cross-site script injection (XSS) 
<%= HttpUtility.HtmlEncode(this.CompanyName) %> 

. NET 4.0 introduce una nueva notación de acceso directo (Html Encoding Blocks) para la codificación HTML a su salida:

<%: this.CompanyName %> 

en cuanto a su enfoque original, AS Los controles web de P.NET como Literal representan partes individuales de una página web; no puede usarlos varias veces en una página porque la instancia de objeto company_name se refiere a la parte específica del HTML generado por <asp:literal> en su página .aspx.

+4

Advertencia: esto lo deja abierto a los errores xss. Un control de etiqueta desinfectará la salida. ASP.Net 4 (salió la semana pasada) tiene una nueva picadura de abeja '<%: %>' que casi siempre debería usar en lugar de '<%= %>' –

0

La respuesta más simple es que necesita definir controles múltiples.

Pero una mejor solución sería la de hacer esto:

Crear una propiedad en el código detrás de lado de las cosas:

protected CompanyName{get;set;} 

Luego, en el lado aspx de las cosas, la referencia que con la <% =%> comandos

<span><%=CompanyName %></span> 
+1

<% = lo deja abierto a los errores xss. Si puede usar asp.net 4, <%: es mejor. –

3

en este caso, se crea una propiedad en la página y de salida que en cada lugar que lo necesites

public string CompanyName { get { return "Acme Windows"; } } 

Y en el aspx:

.NET 4.0:

<%:this.CompanyName%> 

Antes 4.0:

<%=this.companyName%> 
1

Se podría añadir el control de forma dinámica:

Literal myLiteral = new Literal(); 
myLiteral.text = "Acme Windows"; 
this.Page.Controls.Add(myLiteral); 

También puede agregar el control dentro de un control específico de la página, cambiando la referencia a la this.Page.Controls control particular desea agregar el literal a.

0

¿Por qué es una wiki de la comunidad?

De todos modos, tiene varias posibilidades para lograr lo que desea. Colocar múltiples variables con el mismo nombre no es la mejor práctica. Si lo tiene lleno, digamos, valor "semidinámico", no lo pondría codificado en su código. Lo que haría es usar un archivo de recursos global.

Crea un nuevo archivo de recursos en la carpeta App_GlobalResources y agrega una clave "COMPANY_NAME" con el valor "Acme Windows". Luego, dentro de su código ASPX se puede hacer algo como

<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/> 

He escrito un blog post some time ago que detalla este enfoque. La ventaja del archivo de recursos es que no tiene que tocar el código.

Si desea "refactorizar" más, entonces - suponiendo que tenga información general de la empresa que debe mostrar en diferentes posiciones en la página - puede crear un UserControl por separado que contenga la información como nombre de la empresa, número de teléfono, contacto información, etc. Dentro de ese control tiene su literal, etiqueta, lo que sea que use para mostrar esa información exactamente 1 vez. Este UserControl se coloca en los lugares de la página real donde lo necesita, incluso varias veces.

Cuestiones relacionadas