当我使用默认路由:ASP.NET MVC中删除控制器查询字符串操作
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资源未找到错误。
注:在课堂上做工精细的其他方法,但是这些要么没有参数或“身份证”,它的唯一的方法就是所谓的与两个日期时间?当我从URL中删除控制器时失败的参数。
感谢您的更新答案,但是我做的唯一更改是从上面的“routes.MapRoute”中删除“{controller} /”文本 - 没有任何拼写错误等的机会,这也是使用MVC 3
进一步:使用Charx的建议:
routes.MapRoute(
"SpecificAction",
"{action}/{FromDate}/{ToDate}",
new { controller = "ControllerName", id = UrlParameter.Optional });
我不再得到一个404错误,但它给了一个“400 - 错误的请求”由于“/” s,因此我将日期格式化为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通过为空。
最后:我改变了两个日期的类型为字符串,并将其转换为日期时间的方法 - 现在这两个参数都经过精细 - 我想这也许是在寻找第一个参数的时间元素,因此忽略了第二个。
现在唯一突出的事情是,如果任何人都可以回答这个问题,那么需要“id”参数的方法现在似乎将它用作查询字符串(NewsEnrty?ID = 5)而不是“NewsEntry/5”回答 - 再次感谢Chanx。
你为什么要删除'{控制器}'从你的映射路线?你是否只想制作一个两层深的网址? – Charx
该网站是非常简单的 - 在网址中的控制器似乎过度,因为将只有一个控制器 - 它不能只是从网址中删除,但仍然用于路由,以确定必要的类? – user1907097
看看我的答案,让我知道如果这对你有用。 – Charx