代码之家  ›  专栏  ›  技术社区  ›  Jack Ryan

ASP.NET MVC路由:我可以有一个带有斜杠的操作名吗?

  •  2
  • Jack Ryan  · 技术社区  · 17 年前

    我想做的是在 /Products/Details/{id} ,它将路由到上的操作详细信息 ProductsController /Products/Details/Edit/{id} .

    我试着用 [ActionName("Details/Edit")]

    3 回复  |  直到 12 年前
        1
  •  5
  •   Lewis    17 年前

    为什么不采取以下行动?

    • /Products/Edit/{id}-用于编辑

    我倾向于做以下工作:

    • /产品/{id}/视图-用于显示

    希望这有意义!

        2
  •  1
  •   Dmytrii Nagirniak    17 年前

    添加这样的路线 之前 默认值为:

    routes.MapRoute(
        "DefaultWithDetails",
        "{controller}/Details/{action}/{id}"},
        null);
    
        3
  •  1
  •   Tony Borf    17 年前

    你能做的就是这样。在默认路由之前设置一个新路由;

     routes.MapRoute(
         "PRoute", 
         "{controller}/{action}/{action2}/{id}", 
         null   
     );
    

    然后,在产品控制器中,如果您的操作是这样的,请注意,参数名称与路由中的名称匹配。

    public ActionResult Details(string action2, string id)
    {
        switch (action2)
        {
            case "edit":
                // Do Something.
                return View("edit");
            case "view":
                // Do Something.
                return View("view");
           default :
                // Do Something.
                return View("bad-action-error");
        }
    }
    

    现在,细节操作将通过action2和url中的id传递。 因此,像/products/details/view/7这样的URL细节操作将获得“view”和“7”,然后您可以使用操作2上的switch或if语句继续处理。现在可以很容易地扩展到包括其他子动作。