Asp.Net MVC:如何让Html.ActionLink正确渲染整数值?

5

我有一个asp.net mvc应用程序,路由类似于:

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",                          
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
          year = @"\d{4}", 
          month = @"\d{2}", 
          day = @"\d{2}" }
);

我的控制器操作方法签名如下:

public ActionResult Detail(int year, int month, int day, string friendlyName)
{ // Implementation... }

在我看来,我正在做类似以下的事情:

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %>

虽然使用ActionLink生成的URL可以工作,但它使用查询字符串变量而不是URL重写。
例如,它会生成/blog/detail/my-slug?year=2008&month=7&day=5,而不是/blog/detail/2008/07/05/my-slug。
有没有办法让通用版本的ActionLink正确地填充整数值,以便URL符合预期?
谢谢,
Jim
2个回答

4
你的参数是整数与你的问题无关。你想要使用的路由定义实际上没有被使用,这就是为什么生成的URL使用查询字符串参数而不是构建你想要的结构。
路由从上到下进行评估,因此你可能有一个更通用的路由定义满足你请求的URL生成。尝试将你在此帖子中显示的路由移动到路由定义的顶部,你会看到生成的链接符合你的期望。然后研究修改你的路由定义,使其更具体,或按需要移动它们。
调试这些类型的场景可能非常麻烦。我建议下载Phil Haack的路由调试器,它将使你的生活变得更加轻松。

路由在顶部,不幸的是。不过我会看一下调试器。 - Jim Geurts

2
我建议将年、月和日的格式设置为字符串。想一想:你会对这些“整数”进行任何数学计算吗?很可能不会,所以没有必要将它们设为整数。一旦将它们设为字符串,你可以强制使用前导零格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接