ASP.NET MVC 3 RC 2 Проблема маршрутизации - PullRequest
0 голосов
/ 13 декабря 2010

Я изменил маршрутизацию по умолчанию в ASP.NET MVC с

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

на

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}/{lineNo}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional, lineNo = UrlParameter.Optional });

, но теперь все вызовы @ Html.ActionLink () отображаются в href = "",Если я верну маршрут по умолчанию, все ссылки снова будут работать.

Я использовал тот же маршрут с RC1, и он работал отлично.

Я не нашел ничего в документации по выпуску, поэтому ядумаю, что я делаю это неправильно.

С уважением, Штеффен

1 Ответ

2 голосов
/ 13 декабря 2010

В маршруте необязательный параметр может появиться только в конце.Это означает, что в вашем определении маршрута параметр id не может быть необязательным.Вам необходимо явно установить его значение.

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}/{lineNo}",
    new { 
        controller = "Home", 
        action = "Index", 
        lineNo = UrlParameter.Optional 
    }
);

И когда вы генерируете ссылку, вы всегда должны указывать значение параметра id, если вы хотите, чтобы этот маршрут соответствовал:

@Html.ActionLink("some link", "index", new { id = "123" })

В качестве альтернативы вы можете указать значение по умолчанию для параметра id:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}/{lineNo}",
    new { 
        controller = "Home", 
        action = "Index", 
        id = "123",
        lineNo = UrlParameter.Optional 
    }
);

Теперь вам больше не нужно указывать его в ссылках.

...