2010-12-29 4 views
20

В моем приложении мне нужно загрузить один и тот же вид из двух разных контроллеров, не помещая представление в каталог общих представлений.Asp.net MVC - Можно ли загрузить представление из другой папки просмотра?

В принципе у меня есть эта структура папок

  • Контроллеры
    • EventsController.cs
    • SearchController.cs
  • Просмотров
    • События
      • Preview.aspx
    • Поиск

в основном картина это так же, как здесь, на переполнение стека. Вы получаете предварительный просмотр кучки вопросов по ссылке вопросов, но также вы получаете идентичную отформатированную страницу, когда выполняете поиск в строке поиска. Представления и модели просмотра предположительно идентичны.

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

Так что мой две части вопроса является ---

  1. Возможно ли это, и если да, то каким образом?
  2. Это плохая практика?

ответ

33

Да, вы можете. Просто return View("~/Views/Events/Preview.aspx").

Однако я бы посоветовал это по ряду причин. Самое большое, что это будет неочевидно для всех, кто пытается изменить код позже (может быть, даже вы) и может привести к потенциальным ошибкам.

Лучшим подходом может быть создание «общего» вида или общего частичного представления. Мое предпочтение было бы общим частичным представлением, а затем в вашем общем виде визуализируйте функцию частичного просмотра, которую вы хотите.

+0

Если я пойду с этим подходом, то будет то, что у меня одинаковые представления в папке «События» и папке «Поиск», которая не является выключателем сделки, просто пытаясь сохранить ее СУХОЙ. Мне не нужно частичное представление, которое отображает все в представлении, это было бы просто странно. –

+0

Но неужели вы действительно визуализируете все в представлении? Если ничего другого, не будет ли название другим? Я бы также предположил, что если это действительно та же самая страница, почему бы просто не использовать дочернее действие для вызова другой страницы? –

+0

Вы правы, я вполне мог назвать его «События/Поиск» и держать его в одном контроллере. Потому что да, все очень точно. Название является динамическим, как и со всеми моими представлениями, и создается в ViewModel. –

1
  1. Это возможно.
  2. Я не уверен, если вы используете строго типизированные виды. Но предположим, что это так, тогда для меня немного странно, что у вас есть Поиск по событиям & Искать по одной и той же модели. Возможно, разделить их на две разные модели взглядов, и представление будет лучше ИМХО. Более того, если вы укажете имя представления для загрузки в контроллер, это как-то считается связующим видом и контроллером, и это, конечно, не очень хорошая идея.
+0

Функция поиска ТОЛЬКО ищет события, поэтому результаты форматируются точно так же, как и события. Модель просмотра точно такая же, и единственной «тонкой» разницей является то, что контроллер поиска имеет параметр «q» (для запроса). –

+0

Возможно, вам следует абстрагировать отображение в контроле, а затем использовать его повторно. – Femaref

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