Изменение структуры папок ASP.NET MVC 3 - PullRequest
13 голосов
/ 13 июня 2011

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

Я хочу сделать это для распределения файлов и папок по тематическим папкам.Я создал базовый класс 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"
                                    };
        }
    }

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

Обновление

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

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

    }

и просмотра

@model DemoModules.Test


<h2>Index</h2>

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

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

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

Ответы [ 3 ]

8 голосов
/ 13 июня 2011

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

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"
};
7 голосов
/ 28 июня 2011

Проверьте это сообщение: http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx

Надеюсь, это поможет.

2 голосов
/ 23 июня 2011

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

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