Tilde no resolver en HyperLinkColumn en ASP.NET 2.0
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 ...
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.)