J'ai besoin de générer des URL dans un modèle dans ASP.NET MVC. Je voudrais appeler quelque chose comme UrlHelper.Action () qui utilise les routes pour générer l'URL. Cela ne me dérange pas de remplir les blancs habituels, comme le nom d'hôte, le schéma, etc.
Y a-t-il une méthode que je peux appeler pour cela? Existe-t-il un moyen de construire un UrlHelper?
asp.net-mvc
urlhelper
pupeno
la source
la source
Réponses:
Conseil utile, dans n'importe quelle application ASP.NET, vous pouvez obtenir une référence du HttpContext actuel
qui est dérivé de System.Web. Par conséquent, ce qui suit fonctionnera n'importe où dans une application ASP.NET MVC:
Exemple:
L'appel de la
Link
propriété sur un objet MyModel créé renverra l'URL valide pour afficher le modèle en fonction du routage dans Global.asaxla source
using
pour les deuxSystem.Web
etSystem.Web.Mvc
J'aime la réponse d'Omar mais cela ne fonctionne pas pour moi. Pour mémoire, c'est la solution que j'utilise actuellement:
la source
Un UrlHelper peut être construit à partir d'une action Controller avec les éléments suivants:
En dehors d'un contrôleur, un UrlHelper peut être construit en créant un RequestContext à partir de RouteTable.Routes RouteData.
(Basé sur la réponse de Brian, avec une correction de code mineure ajoutée.)
la source
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
this.ControllerContext.RequestContext
est aHttpRequestContext
, et le constructeur deUrlHelper
attend aRequestContext
. Les deux classes ne sont pas liées.Oui, vous pouvez l'instancier. Vous pouvez faire quelque chose comme:
RouteTable.Routes
est une propriété statique, vous devriez donc être OK; pour obtenir uneHttpContextBase
référence,HttpContextWrapper
prend une référenceHttpContext
et laHttpContext
délivre.la source
Après avoir essayé toutes les autres réponses, j'ai fini avec
Les haineux vont détester ¯ \ _ (ツ) _ / ¯
la source
J'essayais de faire quelque chose de similaire à partir d'une page (en dehors d'un contrôleur).
UrlHelper ne m'a pas permis de le construire aussi facilement que la réponse de Pablos, mais ensuite je me suis souvenu d'une vieille astuce pour faire efficacement la même chose:
la source
Je pense que ce que vous recherchez est ceci:
la source