Asp.net mvc 3 asp.NETMVC与路由
我在控制器中有以下操作Asp.net mvc 3 asp.NETMVC与路由,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc 3,Asp.net Mvc Routing,我在控制器中有以下操作 public ActionResult Index(int? pageNumber) public ActionResult Details(string seoFriendlyName) 我想有以下路线: ~/article/ -> Action = Index, pageNumber = 1 ~/article/page-5 -> Action = Index, pageNumber = 5 ~/article/page-1 -> ~/articl
public ActionResult Index(int? pageNumber)
public ActionResult Details(string seoFriendlyName)
我想有以下路线:
~/article/ -> Action = Index, pageNumber = 1
~/article/page-5 -> Action = Index, pageNumber = 5
~/article/page-1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo
routes.MapRoute(
null,
"article/page/{pageNumber}",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);
我尝试定义以下路线,但不起作用:
routes.MapRoute(
null,
"article/page-{pageNumber}",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);
任何帮助都将不胜感激 您的要求自相矛盾。例如,如果您有一篇seoFriendlyName==“page-6”且实际页码==2的文章,那么应该选择什么路线 我建议你把你的要求改为
~/article/ -> Action = Index, pageNumber = 1
~/article/page/5 -> Action = Index, pageNumber = 5
~/article/page/1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo
然后您将有以下路线:
~/article/ -> Action = Index, pageNumber = 1
~/article/page-5 -> Action = Index, pageNumber = 5
~/article/page-1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo
routes.MapRoute(
null,
"article/page/{pageNumber}",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);
更新
针对评论:
对于该特定要求,您需要以这种方式修改您的路线:
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/page/{pageNumber}",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);
你还没告诉我们,什么东西不管用。 我看到的唯一一件事是,您为pageNumber参数设置了错误的值 这应该更好地发挥作用:
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/page-{pageNumber}",
new { controller = "MyController", action = "Index"},
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details" },
new[] { "MyNamespace" }
);
如果我调用
Url.Action(“Index”,“MyController”)
,则将呈现~/article/page
,而不是~/article
,如果您希望这是~/article
,则需要更改路由顺序。此外,正如Jan所建议的,您应该将默认的pageNumer设置移动到另一个路由。我马上更新我的答案。在您的示例中,如果我调用Url.Action(“Index”,“MyController”,new{pageNumber=1})
,它将被呈现为~/article/page-1
,我希望它被呈现为~/article
是,请将第一个的顺序更改为。