3

我注册了一条路线:

routes.MapRoute(
    "Journals",
    "Journals/{year}/{month}/{id}",
    new {
        controller = "Journals",
        action = "Get",
        year = UrlParameter.Optional,
        month = UrlParameter.Optional,
        id = UrlParameter.Optional
    }
);

行动:

public ActionResult Get(int? year, int? month, int? id)

稍后查看(只是为了检查):

@Url.Action("Get", "Journals")
@Url.Action("Get", "Journals", new { year = 2013 })
@Url.Action("Get", "Journals", new { year = 2013, month = 4 })
@Url.Action("Get", "Journals", new { year = 2013, month = 4, id = 1 })

结果是:

/Journals
/Journals
/Journals/2013/4
/Journals/2013/4/1

所以第二个 URL 错过了参数。怎么了?

4

1 回答 1

1

您不能有超过 1 个连续的可选路由参数.. 因为它无法理解缺少哪个..

/Journals/2013中的 2013可以解释为 ayear或 amonth或 anid

有关使用 catch-all 路由参数的解决方法,请参阅ASP.NET MVC 路由的无限 URL参数。

于 2013-05-30T21:09:07.353 回答