为什么 URL 在我创建路线时会发生变化?
Why does the URL change when I create a route?
我有一个 ASP.NET MVC5 项目,在视图中,我有一个像这样的 link...
<a href="@Url.Action("Partner", "Home", new {id = Model.PartnerID})">
...loads of markup here...
</a>
这很好用,给我一个 URL 形式的 /Home/Partner/100
但是,如果我为操作添加一条路线...
routes.MapRoute("Partner", "Partner", new { controller = "Home", action = "Partner" });
...然后 URL 呈现为 /Partner?id=100
有没有办法得到 /Partner/100
形式的 URL?
您可以像下面这样创建您想要的地图路线。
routes.MapRoute(
name: "Partner",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Partner", id = UrlParameter.Optional }
);
您的路线定义需要包含 id
的路段。
routes.MapRoute(
name: "Partner",
url: "Partner/{id}",
defaults: { controller = "Home", action = "Partner" }
);
您可以将条目放在 Global.asax.cs 中,如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "customroute1",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "partner",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
}
注意:您在 global.ascx 文件中放置代码的顺序非常重要。
当您创建新的 ASP.NET MVC 应用程序时,该应用程序已配置为使用 ASP.NET 路由。 ASP.NET 路由设置在两个地方。
首先,在应用程序的 Web 配置文件(Web.config 文件)中启用 ASP.NET 路由。
配置文件中有四个部分与路由相关:system.web.httpModules部分、system.web.httpHandlers部分、system.webserver.modules部分和system.webserver.handlers部分部分。小心不要删除这些部分,因为没有这些部分路由将不再有效。
其次,更重要的是,在应用程序的 Global.asax 文件中创建了一个路由 table。 Global.asax 文件是一个特殊文件,其中包含 ASP.NET 应用程序生命周期事件的事件处理程序。路由 table 是在应用程序启动事件期间创建的。
我有一个 ASP.NET MVC5 项目,在视图中,我有一个像这样的 link...
<a href="@Url.Action("Partner", "Home", new {id = Model.PartnerID})">
...loads of markup here...
</a>
这很好用,给我一个 URL 形式的 /Home/Partner/100
但是,如果我为操作添加一条路线...
routes.MapRoute("Partner", "Partner", new { controller = "Home", action = "Partner" });
...然后 URL 呈现为 /Partner?id=100
有没有办法得到 /Partner/100
形式的 URL?
您可以像下面这样创建您想要的地图路线。
routes.MapRoute(
name: "Partner",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Partner", id = UrlParameter.Optional }
);
您的路线定义需要包含 id
的路段。
routes.MapRoute(
name: "Partner",
url: "Partner/{id}",
defaults: { controller = "Home", action = "Partner" }
);
您可以将条目放在 Global.asax.cs 中,如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "customroute1",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "partner",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
}
注意:您在 global.ascx 文件中放置代码的顺序非常重要。
当您创建新的 ASP.NET MVC 应用程序时,该应用程序已配置为使用 ASP.NET 路由。 ASP.NET 路由设置在两个地方。 首先,在应用程序的 Web 配置文件(Web.config 文件)中启用 ASP.NET 路由。
配置文件中有四个部分与路由相关:system.web.httpModules部分、system.web.httpHandlers部分、system.webserver.modules部分和system.webserver.handlers部分部分。小心不要删除这些部分,因为没有这些部分路由将不再有效。
其次,更重要的是,在应用程序的 Global.asax 文件中创建了一个路由 table。 Global.asax 文件是一个特殊文件,其中包含 ASP.NET 应用程序生命周期事件的事件处理程序。路由 table 是在应用程序启动事件期间创建的。