多條路線的問題我與.NET非常缺乏經驗,剛開始學習MVC。我遇到了一個關於多個控制器被發現的問題:ASP NET MVC區域的路由/ VB中
「發現多個類型與名爲'reviews'的控制器相匹配,如果爲該請求提供服務的路由('{controller}/{action}/{ID}')未指定的命名空間來搜索控制器,該控制器的請求相匹配。如果是這種情況下,通過調用的過載寄存器這條路線‘圖路線’的方法,需要一個‘命名空間’參數「。
我最近增加了一個新的「管理」區域,以我的應用程序中,我有一個「ReviewController」。在主應用程序文件夾中還有一個「ReviewController」:
ah - 作爲新用戶,我無法發佈圖像,但基本上在「控制器」和「Areas/Admin/Contollers」。
我有2種途徑成立至今:
在Global.asax.vb默認路由
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute(_
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
{"PowellCasting/Controllers"}
)
End Sub
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
System.Data.Entity.Database.SetInitializer(New System.Data.Entity.DropCreateDatabaseIfModelChanges(Of Models.PowellCastingEntites))
Database.SetInitializer(Of PowellCastingEntites)(New PowellCastingInitializer())
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers")
End Sub
區路線AdminAreaRegistration
Namespace PowellCasting.Areas.Admin
Public Class AdminAreaRegistration
Inherits AreaRegistration
Public Overrides ReadOnly Property AreaName() As String
Get
Return "Admin"
End Get
End Property
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute(_
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}
)
End Sub
End Class
End Namespace
閱讀後左右我遇到的問題,我添加了一些代碼:
我的管理控制器都具有正確的命名空間中定義
- 命名空間PowellCasting.Areas.Admin而不是簡單地PowellCasting。
- 我在全局設置了RegisterAllAreas
- ControllerBuilder.Current.DefaultNamespaces.Add(「PowellCasting/Controllers」)是爲了指定默認路由。
我現在有具體的問題是,當我去「/點評」我得到上面所示的多個控制器錯誤,具體如下:
*爲「評論」的請求已經發現了下面的匹配控制器: PowellCasting.PowellCasting.Areas.Admin.ReviewsController
PowellCasting.PowellCasting.ReviewsController *
我已經啓用了路由調試器和只顯示一個匹配:
啊 - 作爲一個新的用戶,我不能張貼圖片,但它顯示:
管理/ {控制器}/{行動}/{ID}爲FALSE
和
{控制器}/{行動}/{ID}爲TRUE
這是預期,所以我不知道爲什麼我收到的問題。
我已經閱讀了有關使用命名空間重載maproute方法的問題,但無法在VB中找到示例(在c#中加載)。但我想這:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute(_
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Areas/Admin/Controllers"}
)
End Sub
和
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute(_
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Controllers"}
)
End Sub
但沒有成功。
我確信這應該是直接的,我已經嘗試了很多事情 - 這非常令人沮喪。任何幫助將非常感激。
我的第一篇文章就在這裏 - 嗨! :)
感謝您的快速響應 - 這工作! :)我仍然試圖讓自己的頭腦全面,但它開始有意義。我試着去「/ admin」,但失敗了,但它也是我的名字空間包含「PowellCasting」。一旦我把它解決了,它也可以工作。再次感謝你的幫助。 – Ian