我正在制作asp.net mvc应用程序,我有下一期。例如,我需要生成类似于此www.something.com/abc
的网址,其中abc是产品ID,www.something.com/def
其中def是公司ID。
有人能用这样的路线链接向我展示一部分代码吗?
@Html.RouteLink("Sample link 1", "routeName 1",
new {controller = "Home", action = "action name 1", parameter="abc" })
@Html.RouteLink("Sample link 2", "routeName 2",
new {controller = "Home", action = "action name 2", parameter="def" })
只是为了澄清我的问题,例如:
这是路由系统
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "aaaaa",
url: "{id}",
defaults: new { controller = "Home2", action = "Index2" }
);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "bbbb",
url: "{id}",
defaults: new { controller = "Home3", action = "Index2" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这些是routelinks
@Html.RouteLink("bbbb", "aaaaa",new { id = 555 })
@Html.RouteLink("bbbb", "bbbb", new { id = 6666666, controller="Home3"})
他们两个都将我重定向到同一个动作控制器home2和动作Index2。
但我指定哪条路线首先使用“aaaaa”而第二条使用“bbbb”
我还在第二个中指定了不同的控制器。
答案 0 :(得分:3)
你不能拥有2个相同的网址:
路由到2个不同的控制器操作。路由引擎绝对无法消除它们之间的歧义。当这个表单的请求进入时,路由引擎按照它们的定义顺序评估你的路由并且它匹配这个:
routes.MapRoute(
name: "aaaaa",
url: "{id}",
defaults: new { controller = "Home2", action = "Index2" }
);
这就是执行Home2
控制器的原因。您应该区分生成URL(使用Html.RouteLink
帮助程序)的概念,您可以在其中指定路径名称并评估路径。
如果您希望能够消除这两个网址之间的歧义,则需要使用约束。例如:
routes.MapRoute(
name: "aaaaa",
url: "{id}",
defaults: new { controller = "Home2", action = "Index2" },
constraints: new { id = @"\d{1,3}" }
);
routes.MapRoute(
name: "bbbb",
url: "{id}",
defaults: new { controller = "Home3", action = "Index2" },
constraints: new { id = @"\d{4,10}" }
);
在此示例中,第一个路由接受带有1到3位数字的ID,而第二个路径接受带有4到10位数字的ID。