MVC MapRoute не маршрутизируется с обязательным параметром - PullRequest
0 голосов
/ 27 января 2011

Я хочу, чтобы URL-адрес моего приложения MVC был таким:

www.site.com / Bob

Который, в свою очередь, «перенаправит» на Home / Details / Bob.

Я настроил следующий MapRoute:

    routes.MapRoute( _
Nothing, _
"{personName}", _
New With {.controller = "Home", .action = "Details", .personName = ""}, _
New With {.result = New NameConstraint()} _
)

NameConstraint - это IRoutingConstraint, который проверяет, существует ли имя. Если он возвращает true, else возвращает false, что приводит к переходу ко второму (и по умолчанию) MapRoute.

Public Class ListingConstraint
    Implements IRouteConstraint
    Public Function Match(ByVal httpContext As System.Web.HttpContextBase, ByVal route As System.Web.Routing.Route, ByVal parameterName As String, ByVal values As System.Web.Routing.RouteValueDictionary, ByVal routeDirection As System.Web.Routing.RouteDirection) As Boolean Implements System.Web.Routing.IRouteConstraint.Match
        Dim personName As String
        personName = CStr(values("personName"))
        If listingName = "Bob" Then  'akin to checking the database for a valid name
            Return True
        Else
            Return False
        End If
    End Function
End Class

Проблема возникает, когда я звоню: www.site.com/Bob. Он правильно маршрутизирует код Home / Details в контроллере, но предоставленный параметр - ничто.

например. Сведения о функции (ByVal id As String) As ActionResult Dim viewModel As New XViewModel (id) Возвратный вид (viewModel) Конечная функция

Значение идентификатора установлено равным нулю, а не Бобу, как ожидалось.

Есть идеи?

1 Ответ

1 голос
/ 27 января 2011

Попробуйте это:

 New With {.controller = "Home", _
.action = "Details", _
.personName = UrlParameter.Optional}, 

в вашем карте

PS: К счастью, меня не дома ...

...