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