Подтвердить что ты не робот

Изменение структуры папок ASP.NET MVC 3

Я заинтересован в изменении папки структуры. Я прочитал много статей, но я не нашел решения.

Я хочу сделать это, чтобы распространять файлы и папки в тематических папках. Я создал базовый класс BaseViewEngine из RazorViewEngine

public class BaseViewEngine : RazorViewEngine
    {
        public BaseViewEngine()
        {
            MasterLocationFormats = new[]
                                    {
                                        "~/Themes/My/master.cshtml"
                                    };

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


            PartialViewLocationFormats = new[]
                                    {
                                        "~/Blocks/{0}.cshtml"
                                    };
        }
    }

Но он не работает.

Update

Элемент управления примитивен. Только для теста

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var test = new Test { Text = "Hello" };
            return View(test);
        }

    }

И просмотр

@model DemoModules.Test


<h2>Index</h2>

Но когда я запускаю проект. Я получаю ошибку

CS0103: имя "модели" не существует в текущем контексте

О структуре папки, см. источник темы

4b9b3361

Ответ 1

Взгляните на файл web.config в папке Views по умолчанию. Там есть кое-что, что требуется для просмотра Razor, особенно для базового класса для представлений и пространств имен, которые будут использоваться для компиляции представления.

Ответ 2

Вам действительно не нужно внедрять новый движок для изменения путей, вы можете просто зарегистрировать их, как хотите:

private static void RegisterViewEngines(ICollection<IViewEngine> engines)
{
    engines.Clear();

    engines.Add(new RazorViewEngine
    {
        MasterLocationFormats = new[] { "~/Themes/My/master.cshtml" },
        ViewLocationFormats = new[] { "~/Modules/{1}/{0}.cshtml" },
        PartialViewLocationFormats = new[] { "~/Blocks/{0}.cshtml" },
    });
}

protected void Application_Start()
{
    RegisterViewEngines(ViewEngines.Engines);
}

Для справки, пути по умолчанию следующие (не включая области):

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

MasterLocationFormats = new [] {
  "~/Views/{1}/{0}.cshtml",
  "~/Views/{1}/{0}.vbhtml",
  "~/Views/Shared/{0}.cshtml",
  "~/Views/Shared/{0}.vbhtml"
};

PartialViewLocationFormats = new [] {
  "~/Views/{1}/{0}.cshtml",
  "~/Views/{1}/{0}.vbhtml",
  "~/Views/Shared/{0}.cshtml",
  "~/Views/Shared/{0}.vbhtml"
};