デフォルトルートを使用する場合:
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」がありません。2 つの 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 は null として認識されます。
Final : 2 つの日付の型を文字列に変更し、メソッドでそれらを datetime にキャストしました。これで、両方のパラメーターが正常に処理されました。おそらく、最初のパラメーターの時間要素を探していたため、2 番目のパラメーターを無視したと思います。
唯一の顕著な点は、「id」パラメーターを必要とするメソッドが、「NewsEntry/5」ではなくクエリ文字列 (NewsEnrty?ID=5) として使用しているように見えることです。チャンクス。