2009-08-13 2 views
6

J'ajoute un formulaire Web à partir duquel je souhaite résoudre des itinéraires vers des URL. Par exemple, dans MVC, je voudrais simplement utiliserAccédez à HtmlHelpers à partir de WebForm lors de l'utilisation d'ASP.NET MVC

return RedirectToAction("Action", "Controller"); 

Donc, si vous avez un moyen d'arriver à ce même URL à partir d'un formulaire Web dans la même application, il serait apprécié.

+0

vous avez besoin d'une instance de UrlHelper, non HtmlHelper –

+3

essayez ceci: http://stackoverflow.com/questions/724153/how-do-i-construct-a-route-without-viewcontext-in-asp -net-mvc –

Répondre

15

Essayez quelque chose comme ceci dans votre Webform:

<% var requestContext = new System.Web.Routing.RequestContext(
     new HttpContextWrapper(HttpContext.Current), 
     new System.Web.Routing.RouteData()); 
    var urlHelper = new System.Web.Mvc.UrlHelper(requestContext); %> 

<%= urlHelper.RouteUrl(new { controller = "Controller", action = "Action" }) %> 
0

Pour ceux qui recherchent une HtmlHelper réelle ou d'une manière plus propre à utiliser le urlHelper dans une page:

public static class PageCommon 
{ 
    public static System.Web.Mvc.UrlHelper GetUrlHelper(this System.Web.UI.Control c) 
    { 
     var helper = new System.Web.Mvc.UrlHelper(c.Page.Request.RequestContext); 
     return helper; 
    } 
    class ViewDataBag : IViewDataContainer 
    { 
     ViewDataDictionary vdd = new ViewDataDictionary(); 
     public ViewDataDictionary ViewData 
     { 
      get 
      { 
       return vdd; 
      } 
      set 
      { 
       vdd = value; 
      } 
     } 
    } 
    public static System.Web.Mvc.HtmlHelper GetHtmlHelper(this System.Web.UI.Control c) 
    { 

     var v = new System.Web.Mvc.ViewContext(); 
     var helper = new System.Web.Mvc.HtmlHelper(v, new ViewDataBag()); 
     return helper; 
    } 
} 
+0

Cela a été infructueux pour moi. J'ai créé la classe PageCommon de classe. Et puis j'ai ajouté l'extrait sur MasterPage.master. '<% = this.GetHtmlHelper(). Partiel (" Erreur ")%>' et a reçu une ArgumentNullException. –

3

Version révisée du code ci-dessus pour PageCommon ... comme c'est actuellement il casse.

public static class MvcPages{ 
public static UrlHelper GetUrlHelper(this System.Web.UI.Control c) 
{ 
    var helper = new System.Web.Mvc.UrlHelper(c.Page.Request.RequestContext); 
    return helper; 
} 

public static HtmlHelper GetHtmlHelper(this System.Web.UI.Control c) 
{ 
    var httpContext = new HttpContextWrapper(HttpContext.Current); 
    var controllerContext = new ControllerContext(httpContext, new RouteData(), new DummyController()); 
    var viewContext = new ViewContext(controllerContext, new WebFormView(controllerContext, "View"), new ViewDataDictionary(), new TempDataDictionary(), TextWriter.Null); 

    var helper = new HtmlHelper(viewContext, new ViewDataBag()); 
    return helper; 
} 

private class ViewDataBag : IViewDataContainer 
{ 
    ViewDataDictionary vdd = new ViewDataDictionary(); 
    public ViewDataDictionary ViewData 
    { 
     get 
     { 
      return vdd; 
     } 
     set 
     { 
      vdd = value; 
     } 
    } 
} 

private class DummyController : Controller 
{ 

} 

} 
+0

Cela a été infructueux pour moi. J'ai créé la classe MvcPages. Et puis j'ai ajouté l'extrait sur MasterPage.master. '<% = this.GetHtmlHelper(). Partiel (" Erreur ")%>' et a reçu une exception InvalidOperationException. –

Questions connexes