2012-06-22 3 views
0

Я хотел бы иметь действие индекса для контроллера «Пользователи», который принимает необязательный параметр.Контроллер с действием индекса с необязательным параметром

/Users/{id} 

Или

/Users 

Я хотел бы избежать:

/Users/Index/{id} 

Или

/Users/Index/ 

Я добавил путь к карте/Users/{ID} к действие индекса.

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

Это хорошо работает. У меня возникла проблема, когда я добавил в контроллер «Пользователи» другое действие «Добавить», а также дополнительный параметр. Маршрут, который я добавил ранее, неправильно интерпретирует Добавить как параметр для действия индекса. Действие «Индекс» запускается для/Users/Add.

Как я могу получить лучшее из того и другого?

Спасибо.

ответ

2

Установите ограничение свойство только позволяют номерам. Это должно исправить вашу проблему маршрутизации.

routes.MapRoute("Users", 
    "Users/{id}", 
    new { controller = "Users", action = "Index", id = UrlParameter.Optional }, 
    new { id = "[0-9]+" } 
); 

Редактировать.

Вы можете сделать это по-другому, не используя ограничение регулярного выражения. Добавить для маршрута Пользователи/Добавить в явном виде, добавив, что перед темIndex маршрут:

routes.MapRoute("Users", 
    "Users/Add/{id}", 
    new { controller = "Users", action = "Add", id = UrlParameter.Optional } 
); 
+0

знать регулярное выражение для Guid? :) –

+0

@JoelSkrepnek действительно я этого не делаю. См. Мое редактирование. Вы всегда можете «жестко проложить» маршруты, подобные этому; ключевым является то, чтобы сначала поставить более конкретные. – McGarnagle

+0

Спасибо. Я посмотрю, как это происходит с боссом :). –

0

Вам не нужно создавать маршруты для каждого действия на вашем контроллере. Маршрут по умолчанию, который находится в global.asax в начале создания проекта достаточно для ваших нужд:

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

Я создал маршрут, чтобы избежать/Users/Index/{ID}. –

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