2010-11-29 11 views
7

Cuando utilizo una etiqueta de ancla en una página aspx como abajo,utilizando variables de servidor en a href = <%= xx %> con runat servidor

<a href="~/pages/page.aspx?id=<%= ServervariableName %>"> test </a> 

obtendrá el valor de la variable asignada correctamente a Identificación pero no encaminará la página correctamente como ~ no se evaluará sin el atributo runat = "server" en la etiqueta 'a'. Pero una vez que agrego el atributo de servidor runat, ya no evalúa el nombre de la variable del servidor. ¿Alguien sabe cómo funciona esto o qué debo hacer para cuidar ambos?

Respuesta

11

intente lo siguiente:

href="<%= ResolveUrl("~/pages/page.aspx") + "?id=" + ServervariableName %>" 

Esto sólo funcionará si no se agrega runat="server".

+1

creo que quieres resolverlo isntead de mapPath – Letseatlunch

+1

@Letseatlunch - Gracias. Actualizado la respuesta. Para ser sincero: pasaron años desde que desarrollé asp.net. Pensé que probaría una respuesta. Me quedaré fuera de la etiqueta 'asp.net', creo: D. –

+0

Sí, se olvidó de la función resolveurl. Muchas gracias, funcionó y es exactamente lo que estaba buscando. Es un elemento de menú que debe pasar en un valor de forma dinámica ... así que ...! – user479843

2

No puede usar esta sintaxis para establecer las propiedades de los controles del lado del servidor.

En su lugar, puede establecer la propiedad en el código subyacente, o utilizar la sintaxis de enlace de datos (<%# expression %>) y llamar al DataBind() en el código subyacente.

2

Si quieres tanto runat = server y un camino virtual que cualquiera de:

  1. de ajustar la href en el código atrás. Afaik MapPath no elimina las cadenas de consulta.
  2. Si no desea usar MapPath, puede usar VirtualPathUtility que MapPath usa internamente con mayor probabilidad.
  3. Si desea vincular la variable en su archivo .aspx y aún desea runat = "server", entonces tiene que usar an expression builder. Usted se convierte entonces en la sintaxis

    < a href = "/ carpeta ~/Page.aspx id = <% $ MyVars:? ServerVariableName% >" runat = "server" > El enlace </a >

PM si necesita ayuda con eso. Es muy útil para la personalización de localización y para interconectar el compilador ASP.Net (es decir, no la que C#/VB, pero el que se puede compilar ASPX páginas)

+0

Los constructores de expresiones son realmente geniales y yo no sabía acerca de. Gracias por hacérmelo saber. ¿Existe una forma fácil de declarar una variable de página y convertirla en una expresión? – user479843

+0

Por una "variable de página", ¿qué quieres decir? ¿Un campo protegido de la clase que compila la página? De hecho, lo que hace el generador de expresiones es invocado por CodeDom en el tiempo de compilación de ASP.Net y la implementación le permite emitir cualquier código que desee. Soy guapo, podrías hacer que el generador de expresiones MyVars emita el código para acceder a un campo, aunque no lo he hecho. – Henrik

-2

No estoy exactamente seguro de por qué runat="server" impide la evaluación de <%= Property => , pero hay que runat="server "para evaluar el ~ raíz. de acuerdo con MSDN,

usted puede utilizar el operador ~ en cualquier propiedad relacionadas a la ruta en el servidor controles. el operador ~ es reconocido sólo para los controles de servidor y en el código del servidor . No puede usar el ~ operador para elementos de cliente.

De todos modos, esto podría ayudarte.

ASPX

<asp:HyperLink ID="myHyperLink" runat="server" NavigateUrl="~/MyPage.aspx?id=<%=MyProperty %>" Text="Click Me" /> 

CS

myHyperLink.NavigateUrl = string.Format("~/MyPage.aspx?id={0}", MyProperty); 
+0

sí, pero no quería usar un hipervínculo. La función "resolveurl" hizo el truco. – user479843

+0

Sí, lo vi justo después de publicar =) ¡Me alegro de que lo haya conseguido! – bitxwise

+0

Esta solución no funciona: las etiquetas del servidor no se interpretan. –

Cuestiones relacionadas