0

ビューフォルダーの下に2つのフォルダーがあります。1 つは Home で、index.aspx ファイルがあり、DashBoard というビュー フォルダー内の別のフォルダーで、MyDash.aspx があります。

私のルーティングコードはglobal.asaxのように見えます

        public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
        "DashBoard", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional } // Parameter defaults
        );
    }

したがって、http://localhost:7221/またはhttp://localhost:7221/Homeのような URL を入力すると、index.aspx はホーム フォルダーからレンダリングされますが、http://localhost:7221/DashBoardのような URL を入力すると、ページが見つかりませんが、http://localhost:7221/DashBoard/MyDash のように入力すると、ページが表示されます。

では、私の 2 番目のルーティング コードの何が問題になっているのでしょうか。http://localhost:7221/DashBoardのような URL を入力しても MyDash.aspx が来ないのはなぜですか。なにが問題ですか?

2 番目の宛先コードで何を変更する必要がありますか??

見てください.....私はMVCが初めてです。ありがとう

私の更新

global.asax ファイルのルート エントリを変更すると、機能し始めました。理由を教えてください....

            routes.MapRoute(
                "DashBoard",
                "DashBoard/{action}/{id}",
                 new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional }
            );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

この方法でルーティング コードを記述できますか

 routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional } 
);

2 つの URL で同じパターン....詳しくはご相談ください。ありがとう

4

1 に答える 1

1

ルート名(最初のパラメーター)は、呼び出されるアクション/コントローラーに影響を与えません。

ただし、2つのルートパターン(routes.MapRouteの2番目のパラメーター)は同じです。

"{controller}/{action}/{id}"

...したがって、2番目のパターンと一致するものすべて、最初のパターンによってキャッチされます。したがって、それらはすべて最初のマップ定義によってマップされます。

http://localhost:7221/Home最初のパターンと一致し、おそらくインデックスアクションがホームコントローラー内に存在するため、機能します。

http://localhost:7221/DashBoard/MyDashこれは、最初のルートと一致していても、URL(DashBoard / MyDash)を介して渡されたルートパラメーターによってデフォルトのアクション/コントローラー(ホーム/インデックス)をオーバーライドするために機能します。

http://localhost:7221/DashBoard最初のルートパターンによって取得されているため機能しませんが、アクション名を渡さなかったため、デフォルトの-インデックス-を検索します。これは、 DashBoardコントローラー。

更新(問題の修正方法):
したがって、http://localhost:7221/DashBoardMyDashという名前のアクションを使用してDashBoardという名前のコントローラーにマップし{controller}/{action}/{id}、2番目のルートを削除して他のパターンを取得できるようにし、これを1番目のルートとして配置する場合

routes.MapRoute(
        "DashBoard", 
        "DashBoard/{action}/{id}",
         new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional }               
    );

これはより具体的なルートであるため、キャッチオールの前に進む必要があります{controller}/{action}/{id}。で始まらない/DashBoardものは、それによって拾われることはありません。

于 2012-08-04T20:20:02.423 に答える