2010-12-13 5 views
0

Я изменил маршрут по умолчанию в ASP.NET MVC изASP.NET MVC 3 RC 2 Routing проблема

 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() звонки предоставляются to href = "". Если я изменю маршрут по умолчанию, все ссылки снова работают.

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

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

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

ответ

2

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

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

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

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

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

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

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

+0

Это новое для RC2? – forki23

+2

Не знаю. Возможно, он мог работать в предыдущих версиях, но это определение маршрута не имеет смысла, потому что, если идентификатор является необязательным, механизм маршрутизации не может устранить неоднозначность между параметрами id и lineNo. Возможно, это правило было соблюдено в RC2, что хорошо для ИМХО. –

+0

Спасибо. Я разделил правило на две части, и теперь он отлично работает. – forki23