當我使用默認路由: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