У меня есть следующий макет моего проекта mvc:
- / Контроллеры
- / Демо
- / Demo / DemoArea1Controller
- / Demo / DemoArea2Controller
- и т.д...
- /Просмотры
- / Демо
- /Demo/DemoArea1/Index.aspx
- /Demo/DemoArea2/Index.aspx
Однако, когда у меня есть это для DemoArea1Controller
:
public class DemoArea1Controller : Controller
{
public ActionResult Index()
{
return View();
}
}
Я получаю ошибку «Индекс представления или его мастер не найден» при обычном поиске.
Как я могу указать эти контроллеры в поиске пространства имен «Demo» во вложенной папке представления «Demo»?
asp.net-mvc
views
Даниэль Шаффер
источник
источник
Ответы:
Вы можете легко расширить WebFormViewEngine, указав все местоположения, в которых вы хотите искать:
Убедитесь, что вы не забыли зарегистрировать механизм просмотра, изменив метод Application_Start в файле Global.asax.cs.
источник
Теперь в MVC 6 вы можете реализовать
IViewLocationExpander
интерфейс, не возясь с механизмами просмотра:где
{0}
- имя целевого представления,{1}
- имя контроллера и{2}
- имя области.Вы можете вернуть свой собственный список местоположений, объединить его со списком по умолчанию
viewLocations
(.Union(viewLocations)
) или просто изменить их (viewLocations.Select(path => "/AnotherPath" + path)
).Чтобы зарегистрировать свой пользовательский расширитель расположения представлений в MVC, добавьте следующие строки в
ConfigureServices
метод вStartup.cs
файле:источник
На самом деле существует гораздо более простой метод, чем жесткое кодирование путей в вашем конструкторе. Ниже приведен пример расширения движка Razor для добавления новых путей. Я не совсем уверен в одном: будут ли кэшироваться пути, которые вы добавляете сюда:
И ваш Global.asax.cs
Одно замечание: для вашего настраиваемого местоположения потребуется файл ViewStart.cshtml в его корне.
источник
Если вы хотите просто добавить новые пути, вы можете добавить их к механизмам просмотра по умолчанию и сэкономить несколько строк кода:
То же самое касается
WebFormEngine
источник
Вместо того, чтобы создавать подклассы RazorViewEngine или полностью заменять их, вы можете просто изменить существующее свойство PartialViewLocationFormats RazorViewEngine. Этот код находится в Application_Start:
источник
Последнее, что я проверил, требует от вас создания собственного ViewEngine. Я не знаю, облегчили ли они это в RC1.
Базовый подход, который я использовал до первого RC, заключался в моем собственном ViewEngine в разделении пространства имен контроллера и поиске папок, соответствующих его частям.
РЕДАКТИРОВАТЬ:
Вернулся и нашел код. Вот общая идея.
источник
Попробуйте что-то вроде этого:
источник
Примечание: для ASP.NET MVC 2 у них есть дополнительные пути к расположению, которые вам нужно будет установить для представлений в «Областях».
Создание движка просмотра для Area описано в блоге Фила .
Примечание. Это предварительный выпуск 1, поэтому в него могут быть внесены изменения.
источник
Большинство ответов здесь: очистите существующие местоположения , позвонив,
ViewEngines.Engines.Clear()
а затем снова добавьте их ... в этом нет необходимости.Мы можем просто добавить новые места к существующим, как показано ниже:
Теперь вы можете настроить свой проект для использования вышеуказанного
RazorViewEngine
в Global.asax:См. Этот учебник для получения дополнительной информации.
источник