ASP MVC中找不到自定义路由

时间:2012-08-28 19:52:48

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

我创建了这条路线:

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

然后我在“Home”控制器中创建了以下“Pages”动作:

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)时,它说:“无法找到资源。”我怎样才能正确布线?感谢。

1 个答案:

答案 0 :(得分:3)

路线中不能有多个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