Где применять логику для элемента управления боковой панели в ASP.NET MVC - PullRequest
1 голос
/ 11 января 2010

Пример использования боковой панели «Последние новости» на каждой странице вашего веб-сайта ASP.NET MVC. У меня есть NewsItemController, который отлично подходит для страниц, посвящающих свое внимание NewsItems. А как насчет того, чтобы на HomeController для домашней страницы появлялась боковая панель новостей? Или любой другой контроллер в этом отношении?

Мой первый инстинкт заключается в том, чтобы поместить логику для выбора топ-5 NewsItems в пользовательский элемент управления, который затем вызывается на главной странице. Таким образом, каждая страница получает боковую панель новостей без необходимости загрязнения любого из других контроллеров логикой NewsItem. Это означает, что нужно поместить логику в то, что я понимал как уровень представления, который обычно используется в контроллере.

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

Ответы [ 3 ]

1 голос
/ 11 января 2010

http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx

Похоже, это решает вопрос - даже с использованием экземпляра боковой панели - но с использованием функции, не включенной в MVC 1 по умолчанию.

http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx

Это также означает, что ответ лежит в RenderAction.

Для всех, кому интересно, вот как я это сделал. Обратите внимание, что вам понадобится сборка MVC Futures для RenderAction.

По сути, у вас будет что-то вроде этого в вашем контроллере:

public class PostController
{

//...

   public ActionResult SidebarBox()
   {
      // I use a repository pattern to get records
      // Just replace it with whatever you use
      return View(repoArticles.GetAllArticles().Take(5).ToList());
   }

//...

}

Затем создайте частичное представление для SidebarBox с содержимым, которое вы хотите отобразить, и на вашей главной странице (или там, где вы хотите его отобразить) вы будете использовать:

<% Html.RenderAction<PostController>(c => c.SidebarBox()); %> 

Не так уж и сложно.

1 голос
/ 11 января 2010
  1. Вы можете создать пользовательский элемент управления (.ascx) и затем вызвать RenderPartial ().
  2. Разработка метода в вашем контроллере с JsonResult в качестве типа возврата. Используйте его вместе с jQuery.
  3. Используйте RenderAction (), как предложено в другом месте.

Раздел новостей с ASP.NET MVC

1 голос
/ 11 января 2010

Я думаю, вы должны рассмотреть возможность размещения на главной странице. Ваш контроллер может собирать данные (конечно же, асинхронно), сохранять их в хорошем свойстве ViewModel для вашего представления (или в TempData), а затем вы можете вызывать RenderPartial () на вашей главной странице для визуализации данных.

Хранит все "отдельно"

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