我有一个名为TaskListsController
的控制器,其操作名为Edit
。
Edit
操作接受可以为null的int参数。如果它收到null,则会添加TaskList
。如果它收到一个int,它会使用相同的ID编辑TaskList
。在每种情况下,逻辑几乎相同。
我想以这样一种方式配置我的路由,即“TaskLists / Add”网址映射到Edit
操作,其中null为参数,网址为“TaskLists / Edit / {id}”地图到Edit
并将其传递给网址中的ID。
我可以从在浏览器中输入网址并让它们正确路由到操作的角度来实现这一点,但是它在哪里下降是系统从Html.ActionLink
生成网址的地方。
我使用以下方式生成“添加”链接:
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?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'),但'添加'链接出现'TaskLists / Edit'。
有没有办法可以吃蛋糕并吃掉它?
答案 0 :(得分:2)
使用命名路由(Html.RouteLink("linkText", "routeName")
)可能是一种更清晰的方法来定义它,因为那时你也在视图中处理一个干净的路由。这也意味着您每次都会毫无顾虑地找到正确的路线。
相应地更新路线上的Name
参数,然后将以下内容添加到您的视图中:
Html.RouteLink("Add task list", "NewTaskList")
和
Html.RouteLink(taskList.Name, "EditTaskList", new { Id = taskList.Id })