Url 使用静态名称 mvc 的路由
Url routing with static name mvc
我有一个控制器名称 Dashboard
并且在该控制器中我有一个操作 AdminDashboard
。现在默认情况下 url 这个动作变成 /Dashboard/AdminDashboard
。我想将此操作映射到此 url /SupervisorDashboard
这就是我正在做的,但找不到它的说法
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
以及如何使用 Url.Action
重定向到此页面
Global.asax
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
您是否将此新路由定义放在默认路由之前?路由的评估顺序与它们注册的顺序相同。如果您将默认路由放在任何自定义路由之前,它将被使用(并且由于您的代码中可能没有任何 SupervisorDashboardController
,因此将返回 404)。
Url.Action
如果路由以正确的顺序定义,应该可以正常工作。
因此,对于这种情况,RouteConfig 应如下所示:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// this one match /SupervisorDashboard only
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
// should be last, after any custom route definition
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我有一个控制器名称 Dashboard
并且在该控制器中我有一个操作 AdminDashboard
。现在默认情况下 url 这个动作变成 /Dashboard/AdminDashboard
。我想将此操作映射到此 url /SupervisorDashboard
这就是我正在做的,但找不到它的说法
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
以及如何使用 Url.Action
Global.asax
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
您是否将此新路由定义放在默认路由之前?路由的评估顺序与它们注册的顺序相同。如果您将默认路由放在任何自定义路由之前,它将被使用(并且由于您的代码中可能没有任何 SupervisorDashboardController
,因此将返回 404)。
Url.Action
如果路由以正确的顺序定义,应该可以正常工作。
因此,对于这种情况,RouteConfig 应如下所示:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// this one match /SupervisorDashboard only
routes.MapRoute(
name: "SupervisorDashboard",
url: "SupervisorDashboard",
defaults: new { controller = "Dashboard", action = "AdminDashboard" }
);
// should be last, after any custom route definition
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}