2012-06-18 2 views
0

У меня есть контроллер под названием TaskListsController с действием под названием Edit.asp.net mvc - Использование нескольких URL-адресов для того же действия

Действие Edit принимает допустимый параметр int. Если он принимает значение null, он добавляет TaskList. Если он получает int, он редактирует TaskList с тем же идентификатором. В каждом случае логика почти идентична.

Я хотел бы настроить мою маршрутизацию таким образом, чтобы URL-адрес «TaskLists/Add» сопоставлялся с действием Edit с нулевым параметром, а URL «TaskLists/Edit/{id}» отобразился в Edit и передает ему идентификатор в URL.

Я могу заставить это работать с точки зрения ввода URL-адресов в браузере и правильного их маршрутизации, но там, где он падает, это то, где система генерирует URL-адреса от Html.ActionLink.

Я генерации 'Добавить' ссылки с помощью:

Html.ActionLink("Add task list", "Edit", "TaskLists") 

И я генерации ссылки 'Правка' с помощью:

Html.ActionLink(taskList.Name, "Edit", new { Id = taskList.Id }) 

taskList ..where является экземпляром класса TaskList.

Если я использую этот маршрут:

routes.MapRoute(
       "TaskLists/Add", // Route name 
       "TaskLists/Add", // URL with parameters 
       new { controller = "TaskLists", action = "Edit" }); 

      routes.MapRoute(
       "TaskLists/Edit/{id}", // Route name 
       "TaskLists/Edit/{id}", // URL with parameters 
       new { controller = "TaskLists", action = "Edit", id = UrlParameter.Optional }); 

... 'Добавить' ссылка генерируется правильно ('списки задач/Add'), но ссылка 'Edit' выходит «списки задач/Add Id = 1' .

Если я ставлю маршрутизации команд наоборот:

routes.MapRoute(
       "TaskLists/Edit/{id}", // Route name 
       "TaskLists/Edit/{id}", // URL with parameters 
       new { controller = "TaskLists", action = "Edit", id = UrlParameter.Optional }); 

      routes.MapRoute(
       "TaskLists/Add", // Route name 
       "TaskLists/Add", // URL with parameters 
       new { controller = "TaskLists", action = "Edit" }); 

... затем ссылки «Изменить» генерируются правильно («списки задач/Edit/х»), но «Добавить» ссылки выходит «TaskLists/Edit».

Есть ли способ, которым я могу иметь свой торт и есть его?

ответ

2

Использование названных маршрутов (Html.RouteLink("linkText", "routeName")) может быть более чистым способом определения этого, поскольку тогда вы также имеете дело с чистым маршрутом в представлении. Это также означало бы, что вы будете нажимать правильный маршрут каждый раз, не беспокоясь.

Обновление параметров на маршрутах Name соответственно, затем добавьте следующие строки в ваш взгляд:

Html.RouteLink("Add task list", "NewTaskList")

и

Html.RouteLink(taskList.Name, "EditTaskList", new { Id = taskList.Id })

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