2

デフォルトルートを使用する場合:

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) として使用しているように見えることです。チャンクス。

4

2 に答える 2

0

わかりました。質問を編集すると、最初の回答が得られます。また、問題をテストするための簡単なソリューションも作成します。これは、ニュース コントローラーのアクションにも適しています。日付がルーティングにどのように影響するかはありません。しかし、最初に確認する必要があります。おそらく、間違いを犯した可能性があります。もう一度ルーティングを確認し、コントローラー名を確認して再入力し、適切なアクションが適切なコントローラーに配置されていることを確認します。それでも問題が解決しない場合は、問題の小さなプロジェクトを作成し、それを入手してテストできるドロップボックスまたは別の場所に配置してください。現時点では問題を再現できないためです。また、私は MVC 3 を使用しています。

于 2012-12-16T00:43:54.157 に答える
0

編集しました。URL で呼び出すアクションを引き続き識別できるようにする場合は、特定のアクション ルートを指定し、アクションがオンになっている正しいコントローラーを確実に識別する必要があります。

routes.MapRoute(
"SpecificAction",
"{action}/{FromDate}/{ToDate}",
new { controller = "ControllerName", id = UrlParameter.Optional } );

routes.MapRoute(
"Default", // 
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
于 2012-12-17T16:54:36.563 に答える