2009-08-13 20 views
6

Aggiungo un Web Form da cui vorrei risolvere i percorsi verso gli URL. Ad esempio, nel MVC vorrei solo usareAccesso a HtmlHelpers da WebForm quando si utilizza ASP.NET MVC

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

Quindi, se si dispone di un modo di arrivare a quello stesso URL da un Web Form nella stessa applicazione, sarebbe apprezzato.

+0

è necessario un'istanza di UrlHelper, non HtmlHelper –

+3

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

risposta

15

provare qualcosa di simile nella vostra 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

Per chi cerca un HtmlHelper reale o un modo più pulito per utilizzare l'UrlHelper in una pagina:

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

Questo non ha avuto successo per me. Ho creato una classe di classe PageCommon. E poi ho aggiunto lo snippet su MasterPage.master. '<% = this.GetHtmlHelper(). Parziale (" Errore ")%>' e ricevuto un'eccezione ArgumentNullException. –

3

versione riveduta del codice sopra per PageCommon ... come al momento si rompe.

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

Questo non ha avuto successo per me. Ho creato classi MvcPages. E poi ho aggiunto lo snippet su MasterPage.master. '<% = this.GetHtmlHelper(). Parziale (" Errore ")%>' e ricevuto un InvalidOperationException. –

Problemi correlati