0

我有一个控制器调用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 })

..wheretaskListTaskList类的一个实例。

如果我使用此路由:

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”),但“添加”链接出现“任务列表/编辑”。

有什么办法可以让我吃蛋糕吗?

4

1 回答 1

2

Html.RouteLink("linkText", "routeName")使用命名路由(这也意味着您每次都能毫无顾虑地走上正确的路线。

相应地更新Name路线上的参数,然后将以下内容添加到您的视图中:

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

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

于 2012-06-19T01:12:45.757 回答