2016-10-25 16 views
2

В стремлении сохранить свои взгляды, организованное в рамках моего нового приложения MVC 5, я создал структуру папок следующим образом:Работы с подпапками в пользовательском виде двигателе

Views 
|-- Account 
| |-- Partials 
|  |-- EditUser.cshtml 
|  |-- ListUsers.cshtml 
| |-- Home.cshtml 
| 
|-- Admin 
    |-- Partials 
     |-- AnotherPartialView.cshtml 

Теперь я хотел бы для этого создайте настраиваемый механизм просмотра, поэтому мне не нужно указывать полный путь к папке Partials в папках моего основного вида.

Я создал пользовательский вид двигателя, как это:

public class CustomViewEngine : RazorViewEngine 
{ 
    public CustomViewEngine() 
     : base() 
    { 

     var viewLocations = new[] { 
      "~/Views/{1}/{0}.cshtml", 
      "~/Views/Shared/{0}.cshtml", 
      "~/Views/{1}/Partials/{0}.cshtml" 

     }; 

     this.PartialViewLocationFormats = viewLocations; 
     this.ViewLocationFormats = viewLocations; 


    } 
} 

и зарегистрировал его в Application_Start() в Global.asax

protected void Application_Start() 
{ 
    /* snip */ 
    ViewEngines.Engines.Add(new CustomViewEngine()); 
} 

Edit:

Я называю парциальное Просмотров:

[HttpGet] 
/// http://localhost/Account/ListUsers 
/// View is located in ~/Views/Account/Partials/ListUsers.cshtml 
public ActionResult ListUsers() 
{ 
    /* populate model */ 

    return PartialView("ListUsers.cshtml", Model); 
} 

Мое мышление состояло в том, что если я включаю параметр контроллера {1}, за которым следует папка Partials в локациях вида, это остановит меня в каждой папке Partials в качестве местоположения. Это также означает, что я могу просто ссылаться на представление по имени, а не на его полный путь.

Однако, я все еще получаю сообщение об ошибке, что частичный вид не может быть найден ни в одном из поисковых местоположений.

Любая помощь будет оценена по достоинству.

Спасибо!

+0

Можете ли вы показать пример того, как вы пытаетесь, чтобы сделать частичный вид? Потому что я скопировал ваш код в тестовом проекте и, похоже, работает отлично для меня. Также класс класса просмотра, который вы поделили здесь, называется «CustomViewEngine», но вы добавляете «IridiumViewEngine» в двигатели. Это ваш фактический код или просто ошибка при вставке? – TKharaishvili

+0

@GwynBleidd Ой, да, 'IridiumViewEngine' был ошибкой во время копирования/вставки. Я обновил свой пост выше, когда возвращаются мои частичные представления. Благодаря! – Dave

ответ

1

Я думаю, указав расширение .chstml является проблемой, попробуйте возвращенный вид без него:

return PartialView("ListUsers", Model); 
+0

Ничего себе, я не могу поверить, что не понял этого. Чувствую себя довольно глупо сейчас. : $ Большое спасибо! – Dave

+0

@ Дэйв случается со всеми нами, нет biggie :) – TKharaishvili

 Смежные вопросы

  • Нет связанных вопросов^_^