У меня есть контроллер под названием 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».
Есть ли способ, которым я могу иметь свой торт и есть его?