2009-03-26 7 views
0

J'ai une application ASP.NET initialement déployée sur un Framework .Net 1.1 sur un serveur Windows 2000 que j'utilise maintenant sur un serveur Windows 2008 en utilisant 2.0.50727. Nous utilisons le tilde (~) pour résoudre un chemin absolu dans de nombreuses zones de l'application et cela fonctionne pour des choses comme asp: contrôles de lien hypertexte (avec des balises serveur exécutables), mais pour nos contrôles DataGrid liés qui utilisent HyperLinkColumns pour créer liens basés sur les valeurs d'ID retournés à partir de notre base de données, le tilde est écrit sur la page.Tilde ne résout pas dans HyperLinkColumn dans ASP.NET 2.0

Ce code:

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

dumping ce à la page:

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

Ce qui a changé entre les versions de IIS Framework ou .NET pourrait être à l'origine cette fonctionnalité ne fonctionne plus? Le Tilde résolvait définitivement en 1.1 - J'ai exactement le même code déployé sur une douzaine de serveurs Framework 1.1 dans notre organisation. Malheureusement, la classe qui définit DataNavigateUrlFormatString n'a pas accès à la page, donc je vais devoir faire un peu de kludging pour insérer le travail de Page.ResolveUrl ...

+0

Qu'est-ce que la volonté tilde dans Windows? Je ne l'ai pas vraiment utilisé depuis des années sur Unix quand il se référait au répertoire personnel de l'utilisateur. – ahockley

+0

dans asp.net il devrait se résoudre au chemin absolu où le répertoire virtuel ou l'application est installé - de cette façon le développeur n'a pas besoin de savoir s'il va installer l'application comme: http: // Server/App ou http: // Serveur/Site –

Répondre

3

Je ne suis pas au courant de quoi que ce soit qui change, mais je n'utilise pas HyperLinkColumns (je préfère le contrôle que la colonne Template fournit) donc je n'ai pas cherché de changements.

Une possibilité comme une aide à la bande proverbiale est de changer cette ligne:

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

à ceci:

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

Si ma mémoire est bonne il y avait des problèmes en allant au Master Pages et en utilisant le ' ~ 'à partir des contrôles utilisateur, mais cela fait un moment que j'ai lu quelque chose comme ça.

1

Je ne pense pas que l'HyperlinkColumn d'un Datagrid résout automatiquement l'URL en un chemin absolu. IIRC, la propriété DataNavigateUrlFormatString appelle en interne String.Format() uniquement sur le format fourni. Êtes-vous sûr que cela a fonctionné correctement sur .NET 1.1? IIRC, .NET 1.1 n'a pas de résolution d'URL automatique basée sur tilde.

À mon avis, vous devez utiliser la solution présentée par Stephen (appel Page.ResolveUrl manuellement.)

Questions connexes