当我使用默认路由时:
routes.MapRoute(
"Default", //
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
该应用程序找到以下方法:
public ActionResult News(DateTime? FromDate, DateTime? ToDate)
{
IList<Model.MonthGroupNewsEntry> monthGroupNewsEntries = new services.NewsEntryService(new Data.SqlNewsEntryRepository()).GetMonthGroupNewsEntries();
IList<Model.NewsEntry> newsEntries = new Services.NewsEntryService(new Data.SqlNewsEntryRepository()).GetNewsEntriesWithinDateRange(FromDate,
return View(new Models.NewsViewModel(monthGroupNewsEntries, newsEntries));
}
从:
<%= Html.ActionLink(b.MonthName + " " + b.Year.ToString() + " (" + b.EntryCount.ToString() + ")", "News", new { FromDate = b.FromDate, ToDate = b.ToDate}) %>
但是,当我尝试使用以下方法从 url 中删除控制器时:
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
我收到 404 资源未找到错误。
注意:类中的其他方法工作正常,但这些方法要么没有参数,要么没有“id”,只是用两个 DateTime? 调用的方法?当我从 URL 中删除控制器时失败的参数。
但是,感谢您提供更新的答案-我所做的唯一更改是从上面的“routes.MapRoute”中删除“{controller}/”文本-不可能出现任何拼写错误等,这也在使用MVC 3。
进一步:使用Charx的建议:
routes.MapRoute(
"SpecificAction",
"{action}/{FromDate}/{ToDate}",
new { controller = "ControllerName", id = UrlParameter.Optional } );
我不再收到 404 错误,但由于日期中的“/”,它给出了“400 - 错误请求”,因此我将日期重新格式化为 dd-MM-YYYY:
<%= Html.ActionLink(b.MonthName + " " + b.Year.ToString() + " (" + b.EntryCount.ToString() + ")", "News", new { FromDate = b.FromDate.ToString("dd-MM-yyyy"), ToDate = b.ToDate.ToString("dd-MM-yyyy")}) %>
它不再是 404,FromDate 被很好地识别,但 ToDate 以空值出现。
Final:我将两个日期的类型更改为字符串,并在方法中将它们转换为 datetime - 现在两个参数都很好 - 我猜它可能正在寻找第一个参数的时间元素,因此忽略了第二个。
现在唯一突出的是,需要“id”参数的方法现在似乎将其用作查询字符串(NewsEnrty?ID=5)而不是“NewsEntry/5”,如果有人可以回答这个问题,那么谢谢 - 否则问题得到解答 - 再次感谢钱克斯。