Маршрут по умолчанию для MVC 3 не найден - PullRequest
1 голос
/ 02 апреля 2012

У меня проблемы с маршрутом по умолчанию для административной части.Я изменяю структуру папок по умолчанию, и теперь у меня есть структура, как на картинке

для администратора

for admin

для модулей

for modules

Я создал два ViewEngine AdminViewEngine и CoreViewEngine

AdminViewEngine

public class AdminViewEngine : RazorViewEngine
{
    public AdminViewEngine()
    {
        AreaMasterLocationFormats = new[] { "~/Admin/Views/Shared/admin.cshtml" };

        AreaPartialViewLocationFormats = new[] { "~/Admin/Views/Shared/Partials/{0}.cshtml", "~/Admin/Views/{1}/Partials/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" };

        AreaViewLocationFormats = new[] { "~/Admin/Views/{1}/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" };

        PartialViewLocationFormats = AreaPartialViewLocationFormats;
        ViewLocationFormats = AreaViewLocationFormats;
        MasterLocationFormats = AreaMasterLocationFormats;
    }

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
        return new RazorView(controllerContext, partialPath, null, false, FileExtensions);
    }

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        if (string.IsNullOrEmpty(masterPath))
        {
            masterPath = AreaMasterLocationFormats[0];
        }

        var view = new RazorView(controllerContext, viewPath, masterPath, true, FileExtensions);
        return view;
    }
}

CoreViewEngine

public class CoreViewEngine : RazorViewEngine
{
    internal static readonly string Theme = SiteSettings.Instance.Theme;

    public CoreViewEngine()
    {
        string masterCatalog = string.Format("~/Themes/{0}/Views", Theme);
        string masterPath = string.Format("{0}/master.cshtml", masterCatalog);
        string partialThemesFolder = string.Format("~/Themes/{0}/Partials", Theme);

        MasterLocationFormats = new[] { masterPath };

        ViewLocationFormats = new[] { "~/Modules/Views/{1}/{0}.cshtml" };

        PartialViewLocationFormats = new[]
            {
                "~/Blocks/{0}.cshtml", partialThemesFolder + "/{0}.cshtml", "~/Modules/Views/{1}/Partials/{0}.cshtml",
                "~/Modules/Views/{1}/{0}.cshtml"
            };
    }

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
        return new RazorView(controllerContext, partialPath, null, false, FileExtensions, ViewPageActivator);
    }

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        if (string.IsNullOrEmpty(masterPath))
        {
            string masterCatalog = string.Format("~/Themes/{0}/Views", Theme);
            masterPath = string.Format("{0}/master.cshtml", masterCatalog);
        }

        var view = new RazorView(controllerContext, viewPath, masterPath, true, FileExtensions, ViewPageActivator);
        return view;
    }
}

И у меня есть класс для зарегистрированного ядра и администратора

public class ModulSetup : BaseModule
{
    public override void Setup()
    {
        this.SetupViewEngine();
        this.SetupControllers();
    }

    public override void SetupRoutes(RouteCollection routes)
    {
        routes.MapRoute("AdminRoot", "Admin", new { controller = "Site", action = "Index" });

        routes.MapRoute(
            "Admin",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Site", action = "SiteSetting", id = UrlParameter.Optional });

        routes.MapRoute(
            "Default",
            string.Empty,
            new { controller = "News", action = "LastNews" });
    }

    protected void SetupViewEngine()
    {
        ViewEngines.Engines.Add(new CoreViewEngine());

        ViewEngines.Engines.Add(new AdminViewEngine());
    }

    protected override void SetupControllers()
    {
        ControllerBuilder.Current.DefaultNamespaces.Add("SGN.Core.Admin.Controllers");
    }
}

Админ работает.Но если я пытаюсь перейти на страницу администратора по умолчанию _ http://sitename/Admin/, я получаю 404, я пробую разные варианты для зарегистрированных маршрутов.Но не поможет.Я не знаю, что я должен делать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...