2009-09-17 7 views
3

Lorsque j'ai accès à UrlHelper, je peux convertir un objet ActionResult en une chaîne (c'est-à-dire l'URL réelle) comme ceci: urlHelper.RouteUrl (actionResult.GetRouteValueDictionary());Conversion d'ActionResult en chaîne URL dans une méthode statique

Comment puis-je faire la même chose à partir d'une méthode statique dans laquelle je n'ai pas accès à UrlHelper? Merci.

Répondre

6

Ajoutez simplement une instruction using pour System.Web.Mvc et créez une instance de la classe UrlHelper dans votre méthode statique.

+0

J'espérais qu'il y avait quelque chose de caché quelque part que je pouvais utiliser sans instancier un UrlHelper ... – pbz

+0

La nécessité de réaliser l'instanciation est sous-entendu dans votre question. Ce n'est pas une grande classe. Je suppose que vous pourriez extraire le code pertinent de la classe en utilisant Reflector, mais cela reviendrait essentiellement à la même chose. –

+0

En instanciant la classe, vous bénéficiez de l'utilisation de la classe sous sa forme vierge et testée, et vous avez accès à toutes les surcharges RouteUrl. –

0

J'ai rendu un résultat partiel avec une méthode comme celle-ci.

private string RenderPartialViewToString(ControllerContext context, string viewName, object model) 
    { 
     if (string.IsNullOrEmpty(viewName)) 
      viewName = context.RouteData.GetRequiredString("action"); 

     ViewData.Model = model; 

     using (StringWriter sw = new StringWriter()) 
     { 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName); 
      ViewContext viewContext = new ViewContext(context, viewResult.View, ViewData, TempData, sw); 
      viewResult.View.Render(viewContext, sw); 

      return sw.GetStringBuilder().ToString(); 
     } 
    } 
Questions connexes