【问题标题】:asp.net mvc - Using multiple URLs to the same actionasp.net mvc - 对同一操作使用多个 URL
【发布时间】: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 })

..其中taskListTaskList 类的一个实例。

如果我使用这个路由:

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


    【解决方案1】:

    使用命名路由 (Html.RouteLink("linkText", "routeName")) 可能是一种更简洁的定义方式,因为这样您也可以在视图中处理干净的路由。这也意味着您每次都能找到正确的路线而无需担心。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多