1

このルートをMVC3アプリケーションで機能させようとしていますが、actionメソッドは常にnullパラメーターを取得します。

一般的な考え方は、私のルートには必須パラメーター「category」とオプションパラメーター「city」があるということです。可能性のあるリクエストURLは次のようになります。

   /Map/SelectCategory/Restaurants
   /Map/SelectCategory/Restaurants/Washington

このルートは、JSONデータを返すことを目的としています。これは、JSONデータがWebサービスとして使用されるためです。これは、通常のWebページ用であり、正常に機能する、この後に定義した標準の/ Map/Categoryアクションとは異なります。

したがって、私のルートはGlobal.asaxで次のように定義されています。

routes.MapRoute(    // Map It! Controller
            "MapSvc",  // route name
            "Map/SelectCategory/{catID}/{city}",   // URL with parameters
            new { controller = "Map", action = "SelectCategory", city= UrlParameter.Optional }
         );    

 .. Here a route for /Map/Category/{id} ..
 .. Here a route for /Map/Placemark/{id} ..

私の知る限り、ルート定義で「catID」を省略できます。これは、オプションではないことが自動的にバインドされるためです。それを定義してみましたが、同じ結果です。

最後になりましたが、コントローラーでの私のアクションは次のように定義されています。

 public ActionResult SelectCategory(string catID, string city)
 {
     IEnumerable<Models.Placemark> list;
     if (!string.IsNullOrEmpty(city)) {
        list = doThis();
     } else {
        list = doThat();
     }
     return Json(list);
 }

アクションの最初のステートメントにブレークポイントを設定しましたが、ルート(/ Map / SelectCategory / Restaurants)に記載されているURLをリクエストすると、カテゴリと都市のパラメータの両方がNULLであることがわかります。この場合、カテゴリが必要です。パラメータは「レストラン」になります。

ソリューション 注:100ポイントの評判がないため、回答を投稿するのに6時間待たなければならず、実際に行かなければなりません。

私を正しい方向に導いてくれた@tsegayに感謝します。Global.asaxで定義された他のすべてのルートには、パラメーターを含む明示的なURLがありましたが、この場合、デフォルトルート(空のソリューションテンプレートで作成された標準ルート)が貪欲すぎるために問題が発生しました。

 routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional}
 );

Global.asaxのルートリストの最後に移動しましたが、問題は解決しました。私を正しい方向に導いてくれてありがとう。

4

0 に答える 0