2

ASP.NET、MVC、C# アプリケーションを変更していますが、routes.MapRouteエントリが期待どおりに動作しません。私の Global.asax.cs ファイルには、次の 2 つのルートがあります。

routes.MapRoute(
            "MyRoute1", // Route name
            "{controller}/{action}/{something}/{name}/{id}/{myParameterA}", 
            new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });


routes.MapRoute(
            "MyRoute2", // Route name
            "{controller}/{action}/{something}/{name}/{id}/{myParameterB}", 
            new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );

私のコントローラーのコードは次のようになります-

    public ActionResult MyActionA(string something, string name, string id, string myParameterA)
    {
       //do cool stuff!
    }

    public ActionResult MyActionB(string something, string name, string id, string myParameterB)
    {
       //do awesome stuff!
    }

を呼び出すと、パラメーターが URL にある場合でもMyActionB、最後のパラメーターがnullmyParameterBとしてコントローラーに入力されます (例: /MyController/MyActionB/aThing/aName/123/456)。

最後のパラメーター (上記の例では「456」) をオプションにしたいと考えています。

MyActionA正常に動作しています。

任意の提案をいただければ幸いです! また、どのようにroutes.MapRoute機能するかについての良い参考文献はありますか? ありがとうございました!

4

2 に答える 2

0

確かではありませんが、最初に「myParameterA = "myParameterA"」を設定すると、デフォルト値が割り当てられ、/MyController/MyActionB/aThing/aName/123/456 を渡すと、2 つを入れ替えると思います。最初にマップされますが、数値 456 はデフォルトの文字列値と互換性がないため、null として渡されます。

編集:ああ、参考までに、Apress Pro MVC 3にはこれに関する優れた章があります-Safari Informit。

于 2012-12-05T16:26:35.633 に答える
0

これは、ルート自体でパラメーターを文字列に置き換えると、これら 2 つのルートを区別するものが何もないためです。ルートに静的部分を追加すると、それらを区別できるはずです。

routes.MapRoute(
        "MyRoute1", // Route name
        "{controller}/{action}/{something}/{name}/{id}/firstroute/{myParameterA}", 
        new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });


routes.MapRoute(
        "MyRoute2", // Route name
        "{controller}/{action}/{something}/{name}/{id}/secondroute/{myParameterB}", 
        new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );

それが機能するかどうかを確認してください。

于 2012-12-05T16:28:28.420 に答える