Пользовательский RazorViewEngine выдает ошибку страницы - PullRequest
7 голосов
/ 14 марта 2011

Я пытаюсь реализовать пользовательский механизм просмотра с помощью Razor. Цель состоит в том, если представление находится в подпапке, чтобы использовать это представление.

У меня есть движок вида, полученный из RazorViewEngine

 public class RazorViewFactory : RazorViewEngine
{
public RazorViewFactory()
{
    string TenantID = ConfigurationManager.AppSettings["TenantID"];

    if (TenantID != null)
    {
        MasterLocationFormats = new[] { 
            "~/Views/Shared/{0}.cshtml" 
        };

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

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

}

и в моем Global.asax

 protected void Application_Start()
        {
            ...
            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new RazorViewFactory()); 
        }

Все работает, за исключением случаев, когда я загружаю домашнюю страницу своего вспомогательного представления Tenant, я получаю следующую ошибку.

The view at '~/Tenant/TenantB/Views/Home/Index.cshtml' 
must derive from WebViewPage, or WebViewPage<TModel>.

Если я загружаю базовую домашнюю страницу, она отлично работает с движком Razor.

1 Ответ

21 голосов
/ 14 марта 2011

Вам необходимо скопировать файл web.config из папки Views в папку Tenant (или убедиться, что он имеет те же разделы конфигурации, как описано здесь: Расширения Razor HtmlHelper (или другие пространства имен для представлений). ) Не найдено )

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