2010-11-05 9 views
3

Je viens d'ajouter le routage dans une nouvelle application de formulaires Web asp.net 4, et ma table de routage a été configurée correctement et les demandes de page fonctionnent correctement. Ce que je veux maintenant faire est d'utiliser la méthode Page.GetRouteUrl chaque fois que j'ai besoin de générer une de mes URLs. J'ai commencé à implémenter cela sur différentes pages, puis j'ai pensé qu'il pourrait réduire un peu le code si j'avais une méthode dans une de mes classes auxiliaires, qui construit cette URL (en utilisant la méthode Page.GetRouteUrl) car je pourrais avoir plusieurs paramètres doivent être spécifiés par rapport à la méthode Page.GetRouteUrl à chaque fois. Cependant, dans ma classe d'aide, il ne sait pas ce que 'Page' est. Je pensais que je pourrais passer en 'Page' depuis la page qui veut qu'une URL routée soit générée, mais dans certains cas, je veux construire une de ces URLs dans une autre classe qui ne sait pas ce que 'Page' est, et dans ce scénario ne serait pas en mesure de le transmettre en tant que param (et donc ne serait pas en mesure d'utiliser le Page.GetRouteUrl dans ma classe d'aide).La meilleure façon de générer l'URL via Page.GetRouteUrl dans une classe d'aide?

Quelle est l'approche normale lorsque vous souhaitez utiliser Page.GetRouteUrl dans des classes qui n'ont pas une instance de l'objet Page?

Répondre

3

Vous pouvez passer la page en tant que paramètre constructeur, ou c'est en fait la référence de la page:

var page = HttpContext.Current.Handler as Page; 

Vous pouvez jeter le type de page. Selon le type de requêtes que vous effectuez, il se peut qu'il ne s'agisse pas toujours d'une page (par exemple, d'un appel de service Web, etc.).

HTH.

+0

Aha, si simple quand vous savez comment! :) Brillant, fonctionne un régal. Merci beaucoup! – marcusstarnes

+0

Ah, juste un autre scénario que j'ai remarqué - J'ai un fichier de gestionnaire .ashx qui génère dynamiquement mon sitemap google pour le site Web. Comme la requête pour générer l'URL provient d'un fichier gestionnaire, l'approche ci-dessus ne semble pas fonctionner. Y a-t-il un moyen de le savoir, ou est-ce que je ne serai pas capable d'utiliser Page.GetRouteUrl dans ce scénario? – marcusstarnes

+0

On dirait que votre meilleur pari est d'essayer la méthode RouteCollection.GetVirtualPath; ceci dit c'est pratiquement le même que Page.GetRouteUrl http://msdn.microsoft.com/en-us/library/system.web.ui.page.getrouteurl.aspx. En regardant le réflecteur, c'est tout à fait vrai ... il faudrait donc voir ce que vous pouvez utiliser pour que ça fonctionne ... Ces scénarios sont l'une des choses que j'ai mentionnées dans ma déclaration ultérieure; ça peut être difficile. Bonne chance. –