2013-04-01 2 views
6

Я группирую свои представления, контроллеры и модели. СтруктураОбщие макеты, не найденные с переопределенными Пути просмотра (Форматы местоположения) в ASP.NET MVC

~/Controllers 
-- /_Shared 
-- -- /Views 
-- -- /Content 
-- -- /Scripts 
-- /Home 
-- -- /Models 
-- -- /Content 
-- -- /Scripts 
-- -- /Views 
-- -- HomeController.cs 
-- /Account 
-- -- /Models 
-- -- /Views 
... 

Мнения и частичные работу, но макеты (мастер просмотров) не работу. Когда я указать расположение в файле .cshtml как:

@{ Layout = "SimpleSharedLayout"; } 

Я получаю эту ошибку: макет страницы «SimpleLayout» не удалось найти по следующему пути:

"~/Controllers/Account/Views/SimpleSharedLayout".

ASP.Net только ищет расположение в каталоге текущего контроллера и не заглядывать в общей папке * (который находится в ~/Контроллеры/_Shared/Просмотров) *

Хотя этот работает просто отлично.

@Html.Partial("SharedPartialView") 

Я должен указать макеты с полными путями, как

@{ Layout = "~/Controllers/_Shared/Views/SimpleSharedLayout.cshtml"; } 

Что не трудная вещь, чтобы сделать, но я без ума не в состоянии заставить его работать.

Использование IIS Express, VS 2012, .NET 4.5

У вас есть представление о том, что я не хватает?

Мой Вид двигателя:

public class AreaViewEngine : RazorViewEngine 
{ 
    public AreaViewEngine() 
    { 
     AreaViewLocationFormats = new[] { 
         "~/Controllers/{1}/Views/{0}.cshtml", 
         "~/Controllers/_Shared/Views/{0}.cshtml"}; 

     ViewLocationFormats = AreaViewLocationFormats; 

     AreaMasterLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml" }; 

     MasterLocationFormats = AreaMasterLocationFormats; 

     AreaPartialViewLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml", 
         "~/Controllers/{1}/Views/{0}.cshtml"}; 

     PartialViewLocationFormats = AreaPartialViewLocationFormats; 
    } 
} 

ответ

2

ИМХО, вы боретесь правил платформы в. Было бы моей рекомендацией использовать структуру в том виде, как она была предназначена для этих сценариев, путем создания Областей.

Я знаю, что это, вероятно, не ответ, который вы хотите, но я чувствую, что вы описали это Areas к Т.

+0

Да, но когда я открываю контроллер, я хочу видеть все связанные файлы с этим контроллером. Это виды, пользовательские css и js-файлы и модели. Почему они все равно находятся в разных папках? Когда я работаю с контроллером, я одновременно работаю с соответствующей моделью и смежным представлением. И да, Areas - это не тот объект, который я ищу. То, что я создал, находится между областями и классическим подходом. – Seregwethrin

+0

Вы будете ассимилированы. Сопротивление бесполезно. :) С серьезностью, да, вы можете сделать соглашение работать так, как хотите, но в какой-то момент вы должны задать вопрос, стоит ли это делать.Далеко не от меня, чтобы раздавить свой пограничный дух, но на вашем месте я бы побывал в Районах и сконцентрировался на том, чтобы сделать проект лучшим, чем он может быть. Удачи мой друг. –

+0

Я полностью согласен с тобой, это точно. Я уже сдался :) Даже Resharper не отображает некоторые взгляды и делает меня сумасшедшим. Я думаю, что я должен вернуться к исходной структуре ... – Seregwethrin

0

Попробуйте перегрузить ViewEngine и перезапись AreaMasterLocationFormats и MasterLocationFormats. Проверьте этот еще один удивительный ответ, возможно, это то, что вы ищете.

How to set a Default Route (To an Area) in MVC

Игнорировать титул, это на самом деле не о маршрутах, но где и как viewEngine поиск файлов.