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
是,请将第一个的顺序更改为。