【问题标题】:Custom Route Not Found in ASP MVC在 ASP MVC 中找不到自定义路由
【发布时间】:2012-08-23 09:24:54
【问题描述】:

我创建了这条路线:

    routes.MapRoute( _
        "Pages", _
        "Pages/{id}/{title}", _
        New With {.controller = "Home", .action = "Pages", .id = UrlParameter.Optional, .title = UrlParameter.Optional} _
    )

然后我在“主页”控制器中创建了以下“页面”操作:

Function Pages(Optional ByVal id = 0, Optional ByVal title = "") As ActionResult

    Dim db As NavDbContext = New NavDbContext
    Dim page = db.Tbl_Navigations.Where(Function(p) p.NAV_ID = id)

    If (page.Any) Then

        Dim _title = page.Single.NAV_Element.ToString
        Dim content = page.Single.NAV_Content.ToString
        ViewBag.Title = _title
        ViewBag.Content = content

    End If

    Return View()

End Function

当我导航到 ~/Pages/8/MyPage(这是我数据库中的有效 ID)时,它显示“找不到资源”。我怎样才能正确路由呢?谢谢。

【问题讨论】:

  • 你的控制器方法执行了吗?如果是,则说明您的路线没有问题。如果不是,请使用 Phil Haack 的 Route Debugger 找出您的请求实际到达的路由。
  • 你安装了路由调试器吗?你的动作正在执行吗?这是您路由表中唯一的路由吗?这条特定路线与您可能拥有的其他路线一起放置在哪里?
  • 我明天会试用 Phil Haack 的 Route Debugger 并告诉你。除了 MVC 附带的默认 {controller}/{action}/{id} 之外,这是我创建的唯一路由。自定义路由放置在 Global.asax 文件的 RegisterRoutes 方法中的默认路由下方。
  • 路由按定义顺序匹配。尝试先放置 "Pages" 路由,然后再放置 default {controller}/{action}/{id} 路由。
  • @nemesv:谢谢,您的评论似乎解决了问题。

标签: asp.net-mvc vb.net asp.net-mvc-3


【解决方案1】:

您的路由中不能有多个UrlParameter.Optional,并且可选参数必须是路由中的最后一个参数。从路线的 id 部分删除 UrlParameter.Optional

routes.MapRoute( _
        "Pages", _
        "Pages/{id}/{title}", _
        New With {.controller = "Home", .action = "Pages", .title = UrlParameter.Optional})

以及控制器动作方法

Function Pages(ByVal id As Integer, Optional ByVal title = "") As ActionResult

如果此路由需要这两个参数,那么您无需将任何参数指定为可选参数,以确保该特定路由处理它应该处理的请求。

routes.MapRoute( _
        "Pages", _
        "Pages/{id}/{title}", _
        New With {.controller = "Home", .action = "Pages"})

以及控制器动作方法

Function Pages(ByVal id As Integer, ByVal title As String) As ActionResult

【讨论】:

  • 并确保您的 Pages 路由位于默认 MVC 路由之前,/Pages/8/MyPage 将首先与 {controller}/{action}/{id} 匹配。
  • 我没有做任何事情,只是改变了 global.aspx 中 Routes 的顺序,将自定义路由放在首位。这似乎使它起作用。谢谢你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多