2008-08-15 14 views
13

Tôi mới sử dụng định tuyến MVC (và ASP.Net). Tôi đang cố gắng để bản đồ * .aspx với một bộ điều khiển gọi là PageController.Lập bản đồ tuyến đường ASP.Net MVC

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

Không phải mã trên bản đồ * .aspx đến PageController? Khi tôi chạy điều này và nhập vào bất kỳ trang .aspx nào, tôi nhận được lỗi sau:

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

Có điều gì tôi không làm ở đây không?

Trả lời

6

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

Yeah, bạn cần phải đặt tất cả các tuyến tùy chỉnh trên các tuyến đường mặc định.

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

Đường dẫn mặc định phù hợp dựa trên những gì chúng tôi gọi là Công ước trên cấu hình. Scott Guthrie giải thích tốt về bài đăng trên blog đầu tiên của mình trên ASP.NET MVC. Tôi khuyên bạn nên đọc qua nó và các bài viết khác của mình. Hãy ghi nhớ rằng chúng đã được đăng dựa trên CTP đầu tiên và khung đã thay đổi. Bạn cũng có thể tìm thấy web cast trên ASP.NET MVC trên trang asp.net của Scott Hanselman.

0

Không chắc chắn bộ điều khiển của bạn trông như thế nào, lỗi dường như chỉ ra thực tế là nó không thể tìm thấy bộ điều khiển. Bạn có kế thừa từ Controller sau khi tạo lớp PageController không? PageController có nằm trong thư mục Bộ điều khiển không?

Đây là tuyến đường của tôi trong Global.asax.cs

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

Đây là bộ điều khiển của tôi, mà nằm trong thư mục Controller:

using System.Web.Mvc; 

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

Tôi chỉ trả lời câu hỏi của riêng tôi. Tôi đã có các tuyến đường ngược (Mặc định ở trên trang). Dưới đây là thứ tự đúng. Vì vậy, điều này sẽ trả lời câu hỏi tiếp theo ... làm thế nào để phù hợp với tuyến đường "Mặc định" (Tôi cho rằng họ sử dụng các biểu thức chính quy ở đây) tuyến đường "Trang"?

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

Trên một trong Rob Conery MVC Storefront screencasts, ông gặp vấn đề này chính xác. Đó là vào khoảng 23 phút nếu bạn quan tâm.

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 
} 

đăng ký các tuyến đường cho tất cả aspx

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

Và bạn có thể kiểm tra các tuyến đường bằng MvcRouteVisualizer