2012-01-04 5 views
1

http://blogs.msdn.com/b/simonince/archive/2011/02/02/asp-net-mvc-3-optional-parameter-routing-issue.aspxASP.NET MVC 3 Необязательный параметр маршрутизации Выпуск

Обходной упоминалось в приведенном выше сайте является приемлемым. Но что произойдет, если последний параметр не является необязательным, а первые два являются необязательными в MVC3 ?. Кто-нибудь знает обходной путь. Это просто сомнение, которое меня сбивает с толку.

+0

Если да, то как бы вы хотели определить свой шаблон URL? Если шаблон может быть отличительным, вы должны просто сопоставить его как другую запись маршрутизации – Nat

ответ

3

В определении маршрута MVC3 только последний параметр может быть необязательным. Как намекает Nat, вы можете создать несколько маршрутов для одного и того же метода действий контроллера.

Если вы хотите иметь один обязательный параметр и 2 дополнительных параметров, вы можете определить несколько маршрутов:

...MapRoute(null, "static-segment/{required}/{optional1}/{optional2}", 
    new { controller = "ControllerName", action = "ActionName", 
     optional2 = UrlParameter.Optional }); 

...MapRoute(null, "static-segment/{required}/{optional1}", 
    new { controller = "ControllerName", action = "ActionName", 
     optional1 = UrlParameter.Optional }); 

...MapRoute(null, "static-segment/{required}/{optional2}", 
    new { controller = "ControllerName", action = "ActionName", 
     optional2 = UrlParameter.Optional }); 

Имея один маршрут, где есть 2 дополнительных параметров является то, что вы не можете сделать в MVC3. Кроме того, наличие необязательного параметра происходит до того, как требуемый параметр в маршруте - это то, что вы не можете сделать в MVC3. Вам необходимо определить все сценарии шаблонов маршрутизации и создать маршруты, которые будут соответствовать каждому случаю в вашей схеме URL.

Смежные вопросы