2009-08-13 10 views
6

Ich füge ein WebForm hinzu, von dem ich Routen zu URLs auflösen möchte. Zum Beispiel in MVC würde ichGreifen Sie auf HtmlHelpers von WebForm zu, wenn Sie ASP.NET MVC verwenden

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

benutzen Sie einfach so, wenn Sie einen Weg, um zu derselben URL aus einem Webformular in derselben Anwendung haben, würde es geschätzt.

+0

Sie benötigen eine Instanz von UrlHelper, nicht Htmlhelper –

+3

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

Antwort

15

Versuchen Sie so etwas in Ihrer 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

für die Suche nach einer tatsächlichen Htmlhelper oder einem sauberere Weg suchen, um den UrlHelper in einer Seite zu verwenden:

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

Das war für mich nicht erfolgreich. Ich habe die class PageCommon-Klasse erstellt. Und dann habe ich das Snippet auf MasterPage.master hinzugefügt. '<% = this.GetHtmlHelper(). Partial (" Error ")%>' und eine ArgumentNullException erhalten. –

3

Überarbeitete Version des Codes oben für PageCommon ... wie es gerade ist, bricht es.

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

Das war für mich nicht erfolgreich. Ich habe Klasse MvcPages erstellt. Und dann habe ich das Snippet auf MasterPage.master hinzugefügt. '<% = this.GetHtmlHelper(). Partial (" Error ")%>' und eine InvalidOperationException erhalten. –

Verwandte Themen