2013-08-19 37 views
7

Tôi có một ứng dụng web MVC 4 bao gồm một số khu vực. Tôi gặp sự cố với các quy tắc định tuyến của một khu vực có tên "Catalogue". Các tập tin RouteConfig.cs là:AreaRegistration.RegisterAllAreas() không đăng ký quy tắc cho khu vực

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     ); 
    } 

và Global.asax như sau:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

Và CatalogAreaRegistration là một cái gì đó như thế này:

public class CatalogAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Catalog"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Catalog_default", 
      "Catalog/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Vấn đề là khi tôi gỡ lỗi, RouteCollection các tuyến đường không bao gồm các quy tắc được xác định trong khu vực. Tôi đã sử dụng bộ định tuyến và thấy rằng bộ sưu tập tuyến đường không bao gồm các quy tắc của khu vực "Danh mục". Nó chỉ có các quy tắc trong RouteConfig.

Tôi không biết vấn đề là gì. Cảm ơn trước.

+0

gì nếu bạn thêm 'khu vực = "Catalog" 'để giá trị mặc định của' gọi MapRoute' trong 'phương pháp RegisterArea'? – asymptoticFault

+0

@asymptoticFault tôi đã thử nhưng nó không quan trọng kể từ khi quy tắc trong RegisterArea, không tồn tại trong các tuyến đường toàn cầu. – atakanozgun

+0

Nói cách khác, nếu tôi thêm một điểm ngắt trong phương thức RegisterArea, nó sẽ không bao giờ chạm. Tuy nhiên, AreaRegistration.RegisterAllAreas() được gọi bên trong global.asax – atakanozgun

Trả lời

16

Tôi nghĩ do bộ đệm ẩn của Visual Studio, một số tệp dll không được biên dịch đúng cách và tình huống này có thể xảy ra. Nếu bạn làm thế, xóa tất cả các file tạm thời từ các địa điểm sau:

  • C: \ Temp
  • C: \ Users \% username% \ AppData \ Local \ Microsoft \ VisualStudio
  • C: \ Windows \ Microsoft .NET \ Framework \ v4.0.30319 \ Tệp ASP.NET tạm thời
  • C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Tệp ASP.NET tạm thời
  • Đường dẫn \ To \ Your \ Project \ obj \ Gỡ lỗi

Cập nhật :

  • AppData \ Local \ Temp \ Temporary ASP.NET Files

Sau đó khởi động lại Visual Studio. Đây là cách tôi giải quyết.

+2

Tôi deleter obj và bin folder để dọn dẹp, và nó đã làm việc! –

+0

Điều này cũng làm việc cho me.Thanks! – avidProgrammer

1

Chỉ cần thêm không gian tên của bộ điều khiển của bạn đến AreaRegistration:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      **namespaces: new string[] { "Web.Admin.Controllers" }** 
     ); 
    } 
Các vấn đề liên quan