gpt4 book ai didi

asp.net-mvc - 为什么将此路由参数添加到查询字符串中?

转载 作者:行者123 更新时间:2023-12-04 14:05:08 24 4
gpt4 key购买 nike

我有一个记录用户计步器条目的 ASP.NET MVC 3 应用程序。用户可以通过访问 /Pedometer 查看所有最近的计步器条目并且可以通过访问像 /Pedometer/2011 这样的 URL 来按年、年/月或年/月/日进行过滤。 , /Pedometer/2011/08/Pedometer/2011/08/15 , 分别。

我在 Global.asax 中创建了两个映射路由.下面显示的第一个路由允许各种 URL 模式按日期过滤。第二个路由(未显示)是默认的 ASP.NET MVC 路由。

routes.MapRoute(
"PedometerEntries", // Route name
"Pedometer/{year}/{month}/{day}", // URL with parameters
new
{
controller = "Pedometer",
action = "Index",
year = UrlParameter.Optional,
month = UrlParameter.Optional,
day = UrlParameter.Optional
}, // Parameter defaults
new
{
year = @"\d{4}",
month = @"([012]?\d{1})?",
day = @"(([1-9])|([12][0-9])|(3[0-1]))?"
} // Parameter constraints
);

这是我的问题。我有一个 View ,我想在其中创建以下形式的链接: currentUrl?format=csv ,这将允许用户以 CSV 格式下载所请求 URL 的计步器条目。因此,如果用户正在访问 /Pedometer , 下载链接是 /Pedometer?format=csv .如果用户正在访问 /Pedometer/2011/08下载链接是 /Pedometer/2011/08?format=csv .

为了创建这样的链接,我添加了一个名为 DownloadToExcel 的自定义 Html Helper。使用以下代码:
public static MvcHtmlString DownloadToExcel(this HtmlHelper helper, string linkText)
{
RouteValueDictionary routeValues = helper.ViewContext.RouteData.Values;

// Add the format parameter to the route data collection, if needed
if (!routeValues.ContainsKey("format"))
routeValues.Add("format", "csv");

return helper.ActionLink(linkText, // Link text
routeValues["action"].ToString(), // Action
routeValues); // Route values
}

当我添加 @Html.DownloadToExcel()在我看来,标记会生成一个链接,但这里有一个问题 - 当用户访问最近的条目或按年/月或年/月/日期过滤的条目时,它按预期工作,但在用户访问年份时则不然过滤网址。

以下列表显示了用户访问的 URL 以及自定义 Html Helper 生成的相应 URL:
  • 访问:/Pedometer - 下载链接:/Pedometer?format=csv
  • 访问:/Pedometer/2011 - 下载链接:/Pedometer?year=2011&format=csv
  • 访问:/Pedometer/2011/08 - 下载链接:/Pedometer/2011/08?format=csv
  • 访问:/Pedometer/2011/08/15 - 下载链接:/Pedometer/2011/08/15?format=csv

  • 访问时为什么会这样 /Pedometer/2011下载链接是 /Pedometer?year=2011&format=csv而不是 /Pedometer/2011?format=csv ?为什么它不适用于那种情况,但在年/月和年/月/日期情况下按预期工作?

    谢谢

    最佳答案

    这个问题很可能是由this bug引起的Phil Haack 在他的博客中描述。当您有两个连续的可选 URL 参数时,ASP.NET MVC 3 中引入了一个回归错误。

    关于asp.net-mvc - 为什么将此路由参数添加到查询字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085762/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com