2008-08-15 9 views
13

Ich bin neu in MVC (und ASP.Net-Routing). Ich versuche, * .aspx auf einen Controller namens PageController zu mappen.ASP.Net MVC Route Mapping

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

Wäre das nicht der Code oben Karte * .aspx zu PageController? Wenn ich das ausführe und irgendeine .aspx Seite eintippe, erhalte ich den folgenden Fehler:

Gibt es etwas, das ich hier nicht tue?

Antwort

6

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

Ja, müssen Sie alle benutzerdefinierten Routen über die Standardroute setzen.

Die Standardroute stimmt überein mit dem, was wir Convention over Configuration nennen. Scott Guthrie erklärt es in seinem ersten Blogpost auf ASP.NET MVC gut. Ich empfehle, dass Sie es lesen und auch seine anderen Beiträge. Beachten Sie, dass diese basierend auf dem ersten CTP gepostet wurden und sich das Framework geändert hat. Sie können auch Web Cast auf ASP.NET MVC auf der asp.net-Site von Scott Hanselman finden.

0

Nicht sicher, wie Ihr Controller aussieht, scheint der Fehler auf die Tatsache zu verweisen, dass er den Controller nicht finden kann. Haben Sie den Controller nach dem Erstellen der PageController-Klasse geerbt? Befindet sich der PageController im Verzeichnis Controller?

Hier ist meine Route in dem Global.asax.cs

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

Hier mein Controller ist, die in dem Controller-Ordner befindet:

using System.Web.Mvc; 

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

ich meine eigene Frage nur beantwortet. Ich hatte die Routen rückwärts (Standard war über der Seite). Unten ist die richtige Reihenfolge. Das bringt die nächste Frage auf: Wie passt die Route "Standard" (ich nehme an, sie benutzen hier reguläre Ausdrücke) die Route "Seite"?

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

Auf einem von Rob Conery MVC Storefront screencasts, trifft er genau dieses Problem. Es ist etwa 23 Minuten, wenn Sie interessiert sind.

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 
} 

registrieren, um die Strecke für alle aspx

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

Und Sie können durch MvcRouteVisualizer

die Routen testen