web-dev-qa-db-ja.com

MVCアプリでデフォルトページを設定する方法

ベースURLをオンラインストアの特定のカテゴリに移動させたいのですが(違いがある場合は NopCommerce オンラインストア)。カテゴリーのURL:http://myUrl.com/c/6

Scott Gutherieの投稿を含むいくつかの投稿を読んだ後 MVCルーティングについて Global.ascx.csファイルに次のコードを追加できると思った:

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

        //register custom routes (plugins, etc)
        var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
        routePublisher.RegisterRoutes(routes);

        routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Catalog", action = "Category", id = 6 },
                new[] { "Nop.Web.Controllers" }
        );
    }

しかし、これはうまくいかないようでした。私がやろうとしていることをどのように達成できますか?

私はMVCの経験がほとんどないので、これのいずれかが意味をなさない場合は謝罪します。

18
Abe Miessler

最も興味深い部分がnopcommerceソースコードにあるようです。デフォルトルートは次のように登録されます

    routes.MapLocalizedRoute("HomePage",
                    "",
                    new { controller = "Home", action = "Index"},
                    new[] { "Nop.Web.Controllers" });

基本的に、デフォルトのルートを登録してから、//register custom routesコメント。最終的には次のようになります。

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

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 },
            new[] { "Nop.Web.Controllers" }
    );

    routes.MapRoute(
        "CustomHome", // Route name
        "", // URL with parameters
        new { controller = "Catalog", action = "Category", id = 6 },
        new[] { "Nop.Web.Controllers" }
    );

    //register custom routes (plugins, etc)
    var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
    routePublisher.RegisterRoutes(routes);


}

最初のルートは必要ない場合もあります。よく分かりません。 nopcommerceで動作することはありません。

13
nathan gonzalez

NopCommerceの更新との将来の競合を避けるために、次のようにテーマフォルダー内に新しいRouteProvider.csを作成します。

~/Themes/MyTheme/Infrastructure/RouteProvider.cs

次に、このコードを内部に配置します。

namespace Nop.Web.Themes.MyTheme.Infrastructure
{
public class RouteProvider : IRouteProvider
{
    public void RegisterRoutes(RouteCollection routes)
    {
        routes.MapLocalizedRoute("CustomHome",
                        "",
                        new { controller = "Catalog", action = "Category", Id = 6 },
                        new[] { "Nop.Web.Controllers" });

    }

    public int Priority
    {
        get
        {
            return 10;
        }
    }
}
1

RegisterRoutesメソッドでこれを書いてみてください

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

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 } // Parameter defaults
        );

    }

/ Catalog/Category/6からデフォルトページを設定する必要があります

この行を書く理由がわかりませんnew[] { "Nop.Web.Controllers" }

1
Artur Keyan

やってみました:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
            "Default", // Route name
            "Catalog/Category/6"
    );
}
0
AceMark