ActionLink 在 URL 中显示参数而不是查询字符串 mvc

ActionLink to show parameters in URL instead of querystring mvc

我需要这个 url http://localhost:53249/Admin/EditPosts/1/Edit 但不幸的是我在 url 中得到这样的查询字符串 http://localhost:53249/Admin/EditPosts?id=1&operation=Edit

这是我的操作链接(锚标签)

<td>@Html.ActionLink(@posts.Title, "EditPosts", "Admin", new { id = posts.id, operation="Detail" }, null)</td>

这是我的路由配置:

 public static void RegisterRoutes(RouteCollection routes)
        {
            //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapMvcAttributeRoutes();
            routes.MapRoute(
             name: "Admin",
             url: "Admin/EditPosts/{id}/{operation}",
             defaults: new { controller = "Admin", action = "EditPosts"}
         );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

        }

在这种情况下,您混合了操作和操作。

我建议您这样使用 url:

http://localhost:53249/Admin/Posts/1/Edit

因为您已经通过这种方式为 Posts 对象指示了您的操作 Edit,并且 Edit 是动作,而不是操作,遵循标准 REST。

要使用 url 建议您必须将 MapRoute 更改为:

routes.MapRoute(
    name: "Admin",
    url: "Admin/Posts/{id}/{action}",
    defaults: new { controller = "Posts", action = "Details" } //Details action by default
);