Razor 无法摆脱;找到多个与控制器匹配的类型;
我在StackOverflow中尝试了与这个主题的所有可能的链接,这里给出的所有建议,观看了Rick Anderson的视频,但没有任何积极的结果。仍然收到可怕的“发现了多种类型…”消息。我的项目只是一个尝试区域现象的设置。 Razor viewer是否可以使用区域?或者只使用ASPX 这就是我所拥有的: 在Global.asax中:Razor 无法摆脱;找到多个与控制器匹配的类型;,razor,asp.net-mvc-4,area,Razor,Asp.net Mvc 4,Area,我在StackOverflow中尝试了与这个主题的所有可能的链接,这里给出的所有建议,观看了Rick Anderson的视频,但没有任何积极的结果。仍然收到可怕的“发现了多种类型…”消息。我的项目只是一个尝试区域现象的设置。 Razor viewer是否可以使用区域?或者只使用ASPX 这就是我所拥有的: 在Global.asax中: routes.MapRoute( _ "Default", _ "{controller}/{action}/{id}",
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication.Controllers"})
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")
在三个单独的区域注册文件中:
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
以及:
以及:
我有三个AreaRegistration文件,没有额外引用“.controller=”Home“”,但都给出了相同的结果。我还尝试将名称空间的额外参数添加到这三个声明中。我已尝试将此添加到Global.asax:
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication.Controllers"})
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")
但这也没有积极的结果。我也尝试过在区域注册课程中不使用应用程序名称。我还可以尝试哪些其他可能的行动(并取得成功)?
ProjectStructure很简单:我从一个空项目开始,立即添加了三个区域,HomeController和索引视图。不更改名称空间,所有名称空间都保留为默认名称空间。使用了MVC4模板。
有人有什么建议吗
Peter创建区域时,不要更改其默认名称空间。看起来您将它们从
MyApplication.Areas.Admin.Controllers
更改为MyApplication.Admin.Controllers
(与Blog
和购物的模式相同)。如果使用默认约定,则不应收到此错误 问题是这样解决的:
通过添加%AppName%.Areas.%AreaName%.Controllers,更改模板为每个控制器提供的默认命名空间。因此,在上面的示例中,管理区域的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文件中使用该名称空间
我发现还有其他方法可以解决同样的问题,但与模板生成的代码相比,这是一种代码更改最少的方法。嗨,danludwig,尽管我不确定,但我认为您在这里是正确的。我用稍微不同的方法解决了这个问题。我将在下面提供我的解决方案。