0

私は2つのパラメータを取るアクションを持っていますが、アクションが呼び出されると、パラメータは次のようなクエリ文字列としてURLに表示されます:

localhost:34795/Verification?DepartmentID=3&SubDepartmentID=2

カスタムURLルートを使用すると、これを次のように変更できることを知っています:

ローカルホスト:34795/検証/3/2

しかし、私はこれを行うことができません。このコードを Globas.asax に追加しましたが、それまで結果はありません"

public class MvcApplication : System.Web.HttpApplication
{

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

        routes.MapRoute( "Blog", // Route name 
            "Verification/{DepartmentID}/{SubDepartmentID}", // URL with parameters
            new { controller = "Verification", action = "Index" } // Parameter defaults
            );

        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 = "TestDetails", action = "GetSubDepartmentID", id = "" }  // Parameter defaults
        //);
    }


    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
}

私はこのようにしましたが、何も起こりませんでした。何が間違っていますか?

4

2 に答える 2

2

これでうまくいくはずです:

routes.MapRoute("Blog",
    "Verification/{DepartmentID}/{SubDepartmentID}",
    new {
        controller = "Verification",
        action = "Index",
        DepartmentID = UrlParameter.Optional,
        SubDepartmentID = UrlParameter.Optional
    }
);

次に、IndexVerificationController の関数で:

public ActionResult Index(int DepartmentID, int SubDepartmentID)
于 2013-08-04T03:31:00.117 に答える
1

私は解決策を手に入れました.徹底的なデバッグの後、asp.net mvc 4ではデフォルトでアプリケーションの共有ディレクトリにいくつかのクラスが作成され、そこでルートを登録するためにアプリケーションがこのメソッドを呼び出していたことに気付きました:

protected void Application_Start()
    {

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }

ここで、RouteConfig.cs ファイルにある RegisterRoutes メソッドの呼び出しが表示されます。これは、RouteConfig クラスで Global.asax のメソッドを呼び出していないことを意味します。これが問題であり、私はそれを解決することに腹を立て、ついにこの結果を得て、物事を得ました。仕事。

問題を解決して機能させる私のRouteConfig.csコードは次のとおりです。

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

        routes.MapRoute("home", "", new { controller = "Home", action = "Index" });

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
于 2013-08-05T03:33:53.130 に答える