2013-12-17 115 views
0

我有以下設置爲我的MVC Web項目Asp.NET MVC路由問題:資源無法找到

/Area 
    Admin 
    HomeController 
    Customer 
    HomeController 
    YearController 

/Controllers 
    AgentsController 
    EmployeeController 

我想改變在客戶區域到中家庭控制器的路線以下

http://mywebsite/Customer/{action}/{id} 

我也想所有的其他路線以默認方式行事。 http://mywebsite/{area}/{controller}/{index}/{id}http://mywebsite/{controller}/{index}/{id}

我去了我的CustomerAreaRegistration,並將下面的代碼添加到RegisterArea方法,但它不起作用。當我導航到http://mywebsite/Customer/Createhttp://mywebsite/Agents/View時,它會正確顯示頁面。但是如果我嘗試導航到http://mywebsite/Customer/Year/Edit?yearId=3,它會顯示無法找到的資源。

這裏的寄存器區法爲我CustomerAreaRegistration

public override void RegisterArea(AreaRegistrationContext context) 
    { 

     context.MapRouteLowercase(
      "MyCustomerHomeDefault", 
      "Customer/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     context.MapRouteLowercase(
      "Customer_default", 
      "Customer/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

所以我不知道下一步該怎麼做我還沒有做出任何其他更改我的路由。我下載的路線調試器和它說,匹配http://mywebsite/Customer/Year/Edit?yearId=3路線是

Matched Route: Customer/{action}/{id} 

Route Data 
Key   Value 
action  year 
id   edit 
area  Customer 
controller Home 

誰能請幫助我明白,我怎麼能解決這個問題?

回答

2

由於路由條目在它們被輸入到登記的順序進行評估,交換,使得更特殊的路由首先檢查,然後更一般一秒路由條目,如下所示:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRouteLowercase(
     "Customer_default", 
     "Customer/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 

    context.MapRouteLowercase(
     "MyCustomerHomeDefault", 
     "Customer/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
+0

這是現在爲所有的url工作,但是當我導航到它時,並沒有從url「Customer/Home/Edit?yearId = 3」中刪除控制器名稱Home。 – zSynopsis