1

私の問題は、MVC で 3 つのパラメーターを取る Map Route を作成したことです。3 つすべてまたは 2 つだけを指定すると、パラメーターが URL からコントローラーに渡されます。ただし、最初のパラメーターのみを指定すると、渡されず、null が返されます。この動作の原因は不明です。

ルート:

        routes.MapRoute(
            name: "Details",                                              // Route name
            url: "{controller}/{action}/{param1}/{param2}/{param3}",                           // URL with parameters
            defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
         );

コントローラ:

    public ActionResult Map(string param1, string param2, string param3)
    {

        StoreMap makeMap = new StoreMap();
        var storemap = makeMap.makeStoreMap(param1, param2, param3);
        var model = storemap;
        return View(model);
    }

次の場所に移動すると、文字列 param1 は null を返します。

/StoreMap/Map/PARAM1NAME

しかし、次の場所に移動しても null は返されません。

/StoreMap/Map/PARAM1NAME/PARAM2NAME

4

1 に答える 1

0

ほとんどの場合、デフォルト ルートが干渉しています。プロジェクト テンプレートで定義されているデフォルト ルートは次のようになっていると思います。

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

パラメータが 1 つしかない URL はこのパターンに一致しidますが、メソッド シグネチャにパラメータがないため、値はどのパラメータにも取り込まれません。

以下に示すように、「詳細」ルートを変更してコントローラーを「詳細」にハードコーディングし、デフォルトルートの前に来るように移動してみてください。

    routes.MapRoute(
        name: "Details",                                              // Route name
        url: "Details/{action}/{param1}/{param2}/{param3}",                           // URL with parameters
        defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
     );


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

または、ルートの最初のパラメーターとメソッド シグネチャの名前を に変更してみてくださいid

    routes.MapRoute(
        name: "Details",                                              // Route name
        url: "{controller}/{action}/{id}/{param2}/{param3}",                           // URL with parameters
        defaults: new { controller = "Details", action = "Index", id = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
     );


public ActionResult Map(string id, string param2, string param3)
{

    StoreMap makeMap = new StoreMap();
    var storemap = makeMap.makeStoreMap(id, param2, param3);
    var model = storemap;
    return View(model);
}
于 2012-11-14T05:15:25.090 に答える