我已经在 StackOverflow 中尝试了与该主题相关的所有可能的链接,此处给出的所有建议,都观看了 Rick Anderson 的视频,但没有任何积极的结果。仍然收到可怕的“发现多种类型......”消息。我的项目只是尝试区域现象的一个设置。 Razor 查看器是否可以使用区域?或者只使用 ASPX?
这就是我所拥有的: 在 Global.asax 中:
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication.Controllers"})
在三个单独的区域注册文件中:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Shopping_default", _
"Shopping/{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
End Sub
和:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Blog_default", _
"Blog/{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
End Sub
和:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
End Sub
我有三个 AreaRegistration 文件,没有额外引用“.controller = “Home””,但它们都给出了相同的结果。我还尝试将命名空间的额外参数添加到这三个声明中。我尝试将其添加到 Global.asax:
ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Admin.Controllers")
ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Blog.Controllers")
ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Shopping.Controllers")
ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Controllers")
但这也没有带来积极的结果。我也尝试过在 AreaRegistration 类中不使用应用程序名称。我可以尝试哪些可能的其他行动(并取得成功的结果)? 项目结构很简单:我从一个空项目开始,立即添加了三个区域:HomeController 和 Index View 。不更改命名空间,全部保留为默认值。使用了 MVC 4 模板。 大家有什么建议吗?
彼得
最佳答案
问题是这样解决的:
通过添加 %AppName%.Areas.%AreaName%.Controllers,更改模板为每个 Controller 指定的默认命名空间。因此,在上面的示例中,管理区域的 HomeController 被放置在命名空间中
Namespace MyApplication.Areas.Admin.Controllers
这恰好与模板呈现的 AreaRegistration 类中的命名空间相同,并添加了“Controllers”后缀。
像这样更改 Global.asax 中的代码:
routes.MapRoute( _ "Default", _ "{controller}/{action}/{id}", _ New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication"} _ )
所以这里添加了“MyApplication”命名空间。假设应用程序根 HomeController 中没有添加命名空间(这是默认值),则此操作正确。如果根 HomeController 中有一个命名空间,则应在 Global.asax 文件中使用该命名空间。
我发现还有其他方法可以解决同一问题,但与模板生成的代码相比,这是代码更改最少的方法。
关于razor - 无法摆脱 "Multiple types were found that match the controller",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011016/