35 votes

ASP.Net: utilisation de System.Web.UI.Control.ResolveUrl () dans une fonction partagée / statique

Quelle est la meilleure façon d'utiliser ResolveUrl () dans une fonction partagée / statique dans Asp.Net? Ma solution actuelle pour VB.Net est:

 Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
 

Ou C #:

 System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
 

Mais je me rends compte que ce n'est pas la meilleure façon de l'appeler.

48voto

Dave Ward Points 36006

23voto

jdw Points 181

Il est intéressant de noter que, bien que le Système.Web.VirtualPathUtility.ToAbsolute est très utile ici, c'est pas un remplacement parfait pour le Contrôle.ResolveUrl.

Il y a au moins une différence importante: le Contrôle.ResolveUrl gère les Chaînes de Requête très bien, mais ils causent VirtualPathUtility de jeter un HttpException. Cela peut être absolument déconcertant la première fois que cela arrive, surtout si vous êtes habitué à la façon dont le Contrôle.ResolveUrl œuvres.

Si vous connaissez la structure exacte de la Chaîne de Requête que vous souhaitez utiliser, c'est assez facile à contourner, à savoir:

public static string GetUrl(int id)
{
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
    return string.Format("{0}?id={1}", path, id);
}

...mais si la Chaîne de Requête est passé à partir d'une source inconnue, alors vous allez avoir besoin de l'analyser en quelque sorte. (Avant d'entrer trop profondément dans les que les, note ce Système.Uri peut être en mesure de le faire pour vous).

3voto

Keith Points 46288

J'ai tendance à utiliser HttpContext.Current pour obtenir la page, puis à exécuter toutes les méthodes de contrôle de page / web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X