0

我正在分裂的MVC3應用程序分爲兩個區域。現有的應用程序正在進入一個區域(V1),我們正在第二個區域(V2)開始重新設計。MVC3 RouteHandler結果忽略已解決路由中的Area - 爲什麼?

我已將視圖,模型,控制器等全部移入MyApp \ Areas \ V1 \ xxx文件夾,並且我已經能夠驗證事物正在加載,因爲它們應該是大部分。我感動了所有的V1路由註冊到V1AreaRegistration.cs文件,並修改它使用context.MapRoute,而不是RouteTable.Routes.MapRoute

尋找與菲爾哈克的RouteDebugger路由,一切看起來不錯 - 我V2路由解決,因爲他們應該,基本路線V1工作。什麼是不工作是V1的路線,我已經定義像這樣的自定義MvcRouteHandler

context.MapRoute(
    "MyRouteName", 
    "{myRouteVal}/{controller}/{action}", 
    new { area = "V1", controller = "DefaultController", action = "Index" }, 
    new { controller = _someRouteConstraint}, 
    new string[] { "My.Custom.Project.WebLibrary.Areas.V1.Controllers" }, 
     _myCustomRouteHandler); 

如果我從這次通話中刪除_myCustomRouteHandler,它的偉大工程,把我送到了V1區下正確的觀點。有了它的地方,路由似乎忽略它註冊爲地區航線的事實,我也得到一個黃色的錯誤頁面,上面寫着:

The view 'Index' or its master was not found or no view engine 
supports the searched locations. The following locations were searched: 
~/Views/DefaultController/Index.cshtml 
~/Views/DefaultController/Index.vbhtml 
~/Views/Shared/Index.cshtml 
~/Views/Shared/Index.vbhtml 
~/Views/DefaultController/Index.aspx 
~/Views/DefaultController/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 

我需要能夠使用路由處理程序 - 它對{myRoutVal}參數執行一些驗證工作,如果該參數無效,則重定向到錯誤頁面。

幫助!!

回答

1

發現問題。我們有你看到的上面(context.MapRoute)引用了AreaRegistrationContext的擴展方法 - 這種方法,我沒有正確設置route.DataTokens["Area"]值,所以當它試圖找到來看,它並沒有在該地區尋找。

添加下面一行到我AreaRegistrationContext擴展方法解決了這個問題:

route.DataTokens["Area"] = context.AreaName;