MVC3 Частичные виды - PullRequest
       5

MVC3 Частичные виды

2 голосов
/ 29 декабря 2011

Еще учусь MVC3, EF.Пока я подключаюсь к MySql, но я считаю, что это не будет актуально.Для простоты я решил использовать одну базу данных для своего тестового приложения и включил категорию для дифференциации данных.Например, у меня есть новости, события, информация и категории страниц.Теперь, когда дело доходит до перечисления содержимого в представлениях, например, на главной странице, я хочу перечислить последние 5 новостей (категория новостей), последние 5 событий (категория событий), текст приветствия (категория информации).Я был в состоянии создать частичное представление, чтобы перечислить их в различных разделах домашней страницы.Но я чувствую, что делаю это неправильно, поскольку в каждом из этих PartialViews я снова и снова запрашиваю одну и ту же таблицу и просто фильтрую с помощью where cat=.... в запросе LINQ.Не могли бы вы подтвердить, если это должно быть практикой или есть лучший способ сделать это.

Ответы [ 3 ]

6 голосов
/ 29 декабря 2011

Вы можете сделать следующее:

Контроллер:

public ActionResult Home()
{
  IEnumerable<MyDateRecords> myData = LinqQueryToGetAllTheDataUnFiltered();
  ViewData.Model = new MyViewData { MyData = myData; }
  return View();
}

Класс ViewModel:

public class MyViewData
{
  List<MyDataRecords> MyData { get; set; }
  List<MyDataRecords> News { get { return MyData.Where(m => m.Category = "News"); } }
  List<MyDataRecords> Events { get { return MyData.Where(m => m.Category = "Events"); } }
}

Вид:

@model MyViewModel

@Html.Partial("NewsPartial", Model.News)
@Html.Partial("EventsPartial", Model.Events)

Частично:

@model IEnumerable<MyDataRecord>

Таким образом, мы запрашивали данные только один раз и просто передавали разные наборы для каждого частичного

0 голосов
/ 29 декабря 2011

Это довольно неэффективно.Но хорошо, что вы заметили это, потому что запросы к этой базе данных часто являются узким местом в любом данном запросе.

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

Как только вы освоите ASP.NET MVC, вы сможете начать изучать кеширование.Я бы пока держался подальше от кеширования, потому что если у вас есть данные, которые быстро изменяются, вам будет немного сложно, так как вам нужно начать беспокоиться об обновлении / синхронизации / и т.д.

0 голосов
/ 29 декабря 2011

Для несложного способа представления данных этого типа хорошо то, что вы делаете. Вы должны посмотреть на OutputCacheAttribute для любого метода PartialView, который вы используете на своем контроллере.

...