asp.net MVC区域路由/多路由问题在VB



我对。net非常缺乏经验,刚刚开始学习MVC。我遇到了一个关于发现多个控制器的问题:

"发现多个类型匹配名为'reviews'的控制器。如果服务此请求的路由('{controller}/{action}/{id}')没有指定名称空间来搜索与请求匹配的控制器,就会发生这种情况。如果是这种情况,通过调用带有"namespaces"参数的"MapRoute"方法的重载来注册这条路由。"

我最近添加了一个新的"管理"区域到我的应用程序,我有一个"ReviewController"。在主应用程序文件夹中也有一个"ReviewController":

啊-作为一个新用户,我不能发布图像,但基本上我在"控制器"one_answers"区域/管理/控制器"中有一个"ReviewController"。

到目前为止,我已经设置了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

adminareareregistration中的区域路由

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

在阅读了我所遇到的问题之后,我添加了一些代码:

我的Admin控制器定义了正确的命名空间

  • 命名空间PowellCasting. areas . admin而不是简单的PowellCasting。
  • 我在全局
  • 中设置了RegisterAllAreas
  • ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers")是用来指定默认路由的。

我现在遇到的具体问题是,当我转到"/Reviews"时,我得到如上所示的多个控制器错误,特别是:

*对'reviews'的请求已经找到了以下匹配的控制器:PowellCasting.PowellCasting.Areas.Admin.ReviewsController

PowellCasting.PowellCasting.ReviewsController *

我已经启用了路由调试器,它只显示了一个匹配:

啊-作为一个新用户,我不能发布图片,但它显示:

Admin/{controller}/{action}/{id}为FALSE

{controller}/{action}/{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

但没有成功。

我相信这应该是直截了当的,我已经尝试了很多事情-它非常令人沮丧。如有任何帮助,我将不胜感激。

我在这里的第一个帖子-嗨!:)

如果你仔细阅读你得到的错误信息:

对'reviews'的请求已找到以下匹配控制器:PowellCasting.PowellCasting.Areas.Admin.ReviewsControllerPowellCasting.PowellCasting.ReviewsController

你会注意到PowellCasting重复了两次。

在你的main Global中。Asax路由注册:

routes.MapRoute( _
    "Default", _
    "{controller}/{action}/{id}", _
    New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
    vbNull,
    {"PowellCasting.Controllers"}
)

假设根目录中的ReviewController是这样定义的:

Namespace Controllers
    Public Class ReviewController
        Inherits System.Web.Mvc.Controller
        Function Index() As ActionResult
            Return View()
        End Function
    End Class
End Namespace

注意在命名空间定义中没有PowellCasting前缀(这是VB的一个微妙之处,它会自动添加它,我想这是你的应用程序的名称)

AdminAreaRegistration.vb内部:

context.MapRoute( _
    "Admin_default", _
    "Admin/{controller}/{action}/{id}", _
    New With {.action = "Index", .id = UrlParameter.Optional}, _
    vbNull, _
    {"PowellCasting.Areas.Admin.Controllers"}
)

,它假设您在此区域的ReviewController是这样定义的

Namespace Areas.Admin.Controllers
    Public Class ReviewController
        Inherits System.Web.Mvc.Controller
        Function Index() As ActionResult
            Return View()
        End Function
    End Class
End Namespace

再一次注意到名称空间定义中没有PowellCasting前缀。

我也遇到过类似的问题。

我有一个应用程序,其中有两个区域:Common, Products

当我打开应用程序时,Common_default路由被调用了,但是当我看到RoutesCollection的时候。路线,它显示了4条路线。实际上我只定义了两条路由——一条用于common,一条用于product。

看了上面的评论,我只是给了它一个尝试,我改变我的网站项目属性。

我将默认命名空间从"MyWebsite"更改为"MyWebsite"。转到"我的网站"。它确实奏效了。我的应用程序已经启动并运行。

底线是永远不要在你的MVC4网站项目的默认命名空间中有"."

dealernetworksareareregistration .cs://添加区域

context.MapRoute(
                "DealerNetworks_default",
                "DealerNetworks/{controller}/{action}/{id}",
                new { controller = "Dealer", action = "Index", id = UrlParameter.Optional }
            );

RouteConfig.cs

//Add Namespace
routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional },
                //passing the namespace of the HomeController in the Main area using namespace parameter.
                namespaces: new[] { "SMART.Controllers" }
            ); 

Global.asax.cs

//Register Areas
AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();      

相关内容

  • 没有找到相关文章

最新更新