2008-08-15 18 views
13

Sono nuovo su MVC (e routing ASP.Net). Sto cercando di mappare * .aspx su un controller chiamato PageController.Mappatura percorso MVC ASP.Net

routes.MapRoute(
    "Page", 
    "{name}.aspx", 
    new { controller = "Page", action = "Index", id = "" } 
); 

Non sarebbe il codice qui sopra mappa * aspx a PageController? Quando ho eseguito questo tipo e in qualsiasi pagina aspx ottengo il seguente errore:

The controller for path '/Page.aspx' could not be found or it does not implement the IController interface. Parameter name: controllerType

C'è qualcosa che non sto facendo qui?

risposta

6

I just answered my own question. I had the routes backwards (Default was above page).

Sì, è necessario mettere tutti i percorsi personalizzati di sopra del percorso predefinito.

So this brings up the next question... how does the "Default" route match (I assume they use regular expressions here) the "Page" route?

L'itinerario predefinito corrisponde in base a ciò che chiamiamo Convenzione sulla configurazione. Scott Guthrie lo spiega bene nel suo primo post sul blog su ASP.NET MVC. Ti raccomando di leggerlo e anche i suoi altri post. Tieni presente che questi sono stati pubblicati in base al primo CTP e il framework è cambiato. È inoltre possibile trovare web cast su ASP.NET MVC sul sito asp.net di Scott Hanselman.

0

Non sono sicuro di come il controller sembra, l'errore sembra essere rivolta al fatto che non riesce a trovare il controller. Hai ereditato da Controller dopo aver creato la classe PageController? Il PageController si trova nella directory Controller?

Ecco il mio percorso nelle Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" } 
); 

Ecco il mio controllo, che si trova nella cartella Controllers:

using System.Web.Mvc; 

namespace MvcApplication1.Controllers 
{ 
    public class PageController : Controller 
    { 
     public void Index() 
     { 
      Response.Write("Page.aspx content."); 
     } 
    } 
} 
6

Ho appena risposto alla mia domanda. Ho avuto i percorsi indietro (l'impostazione predefinita era sopra la pagina). Di seguito è l'ordine corretto. Quindi questo solleva la prossima domanda ... come si abbina la rotta "Predefinita" (presumo che utilizzino le espressioni regolari qui) la rotta "Pagina"?

routes.MapRoute(
      "Page", 
      "{Name}.aspx", 
      new { controller = "Page", action = "Display", id = "" } 
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 
1

Su uno dei Rob Conery MVC Storefront screencasts, incontra questo problema esatto. Se sei interessato, è intorno ai 23 minuti.

0
public class AspxRouteConstraint : IRouteConstraint 
{ 
    #region IRouteConstraint Members 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return values["aspx"].ToString().EndsWith(".aspx"); 
    } 

    #endregion 
} 

registrare il percorso per tutti aspx

routes.MapRoute("all", 
       "{*aspx}",//catch all url 
       new { Controller = "Page", Action = "index" }, 
       new AspxRouteConstraint() //return true when the url is end with ".aspx" 
       ); 

E si può testare i percorsi da MvcRouteVisualizer

Problemi correlati