我有一个控制器调用TaskListsController
一个名为Edit
.
该Edit
操作接受一个可为空的 int 参数。如果它接收到 null,它会添加一个TaskList
. 如果它接收到一个 int,它会编辑TaskList
具有相同 ID 的 。每种情况下的逻辑几乎相同。
我想以这样一种方式配置我的路由,即 URL 'TaskLists/Add' 映射到Edit
以 null 作为参数的操作,而 URL 'TaskLists/Edit/{id}' 映射到Edit
并将 ID 传递给它网址。
从在浏览器中输入 URL 并将它们正确路由到操作的角度来看,我可以让它工作,但它失败的地方是系统从Html.ActionLink
.
我正在使用以下方法生成“添加”链接:
Html.ActionLink("Add task list", "Edit", "TaskLists")
我正在使用以下方法生成“编辑”链接:
Html.ActionLink(taskList.Name, "Edit", new { Id = taskList.Id })
..wheretaskList
是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 });
...“添加”链接已正确生成(“TaskLists/Add”),但“编辑”链接出现“TaskLists/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" });
...然后正确生成“编辑”链接(“任务列表/编辑/x”),但“添加”链接出现“任务列表/编辑”。
有什么办法可以让我吃蛋糕吗?