我有一个记录用户的计步器条目的ASP.NET MVC 3应用程序。用户可以通过访问/Pedometer
查看所有最近的计步器条目,并可以分别访问/Pedometer/2011
,/Pedometer/2011/08
和/Pedometer/2011/08/15
等URL,按年,年/月或年/月/日进行过滤。为什么这个路由参数被添加到查询字符串中?
我在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
);
这是我的问题。我有一个观点,我想创建一个表格链接:currentUrl?format=csv
,它可以让用户以CSV格式下载所请求URL的计步器条目。因此,如果用户访问/Pedometer
,则下载链接将为/Pedometer?format=csv
。如果用户访问/Pedometer/2011/08
,则下载链接将为/Pedometer/2011/08?format=csv
。
要建立这种联系我加了一个自定义的HTML辅助命名DownloadToExcel
用下面的代码:
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时不起作用。
下面的列表显示的URL的用户访问,并通过自定义HTML辅助生成相应的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
?为什么它不适用于这种情况,但按照年/月/年/月/日的情况按预期工作?
感谢
解释它,谢谢你的抬头。 :-) –