Pregunta

Tengo una aplicación ASP.NET desplegado originalmente a un 1.1 .Net Framework en el servidor Windows 2000, que ahora estoy usando en un servidor 2008 de Windows utilizando 2.0.50727. Utilizamos la tilde (~) para resolver en una ruta absoluta en muchas áreas de la aplicación y funciona para cosas como asp: controles de hipervínculo (con periodo previo a las etiquetas de servidor), pero para nuestros controles DataGrid enlazado que están utilizando HyperLinkColumns para crear enlaces en base a los valores de ID de regresar de nuestra base de datos, la tilde está consiguiendo escriben en la página.

Este código:

HyperLinkColumn oLink = new HyperLinkColumn();
oLink.DataNavigateUrlField = "IdField";
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

es el dumping esto a la página:

<a href="~/Here171201.aspx">

¿Qué ha cambiado entre las versiones de IIS o .NET Framework podría estar causando esta funcionalidad para trabajar ya no? La tilde se resuelve definitivamente en 1,1 - Tengo exactamente el mismo código desplegado en una docena de servidores 1.1 Framework en nuestra organización. Por desgracia, la clase que establece el DataNavigateUrlFormatString no tiene acceso a la página, así que voy a tener que hacer algún kludging para insertar el trabajo Page.ResolveUrl alrededor ...

¿Fue útil?

Solución

No estoy al tanto de nada vaya a cambiar, pero yo no uso HyperLinkColumns (yo prefiero el control que proporciona la columna de la plantilla), así que no he mirado para cualquier cambio.

Una posibilidad como una banda de ayuda proverbial es cambiar esta línea:

oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

a esto:

oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx"); 

Si la memoria sirve hubo algunos problemas cuando van a las páginas principales y utilizando el '~' de controles de usuario, pero pasado un tiempo desde que leí algo por el estilo.

Otros consejos

No creo que la HyperlinkColumn de una cuadrícula de datos resuelve automáticamente la dirección URL en una ruta absoluta. IIRC, la propiedad DataNavigateUrlFormatString llama internamente String.Format() sólo en el formato suministrado. ¿Seguro que esto funcionó correctamente en .NET 1.1? IIRC, .NET 1.1 no tenía resolución URL automático basado en tilde.

En mi opinión, se debe utilizar la solución presentada por Stephen (Page.ResolveUrl llamada manualmente.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top