ASP.NET MVC Как загрузить список только один раз
От: Lucio Россия  
Дата: 24.05.11 15:39
Оценка:
Здравствуйте.
Была такая проблемма: необходимо в пределенную область вывести из БД 10 рандомных записей (партнеров). С этим я справился. Но!
Как сделать так, чтобы список этих партнеров загружался ОДИН раз, непосредственно при загрузке страницы, а потом оставался неизменным, то есть несмотря по какой ссылке перейдет пользователь, этот спикок отображался в том же виде и заново не загружался из базы? Я пробовал делать через ViewBag и RenderAction, но все равно: при переходе по любой ссылке список постоянно меняется.
Модель:

public class Partner
{
   public int id { get; set; }
   public string name { get; set; }
   public string value { get; set; }
}

Контроллер:

    public class HomeController : Controller
    {
        MarketingEntities storeDB = new MarketingEntities();

        public ActionResult Index()
        {
            //ViewBag.Part = storeDB.partners.OrderBy(a => Guid.NewGuid()).Take(10);
            var query = storeDB.mainpage.First();
            return View(query);
        }

        public ActionResult GetPartnerList()
        {
            var query = storeDB.partners.OrderBy(a => Guid.NewGuid()).Take(10);
            return PartialView(query);
        }

        public ActionResult About()
        {
            var query = storeDB.contactpage.First();
            return View(query);
        }
...

Представление:

@model IEnumerable<Marketing.Models.Partner>

@foreach (var a in Model)
        { <li class="first"><a href="#">@a.name</a></li> }


_layout:

   <h3>Наши партнеры</h3>
    <div class="bg1">
      <ul>
        @{Html.RenderAction("GetPartnerList");}
      </ul>
    </div>
Nomina sunt odiosa
Re: ASP.NET MVC Как загрузить список только один раз
От: Хэлкар  
Дата: 24.05.11 15:40
Оценка: 3 (1)
Кэшировать в сессии?
Re[2]: ASP.NET MVC Как загрузить список только один раз
От: Lucio Россия  
Дата: 24.05.11 15:59
Оценка: :)
Здравствуйте, Хэлкар, Вы писали:

Х>Кэшировать в сессии?


Спасобо тебе огромное!!! ТО что нужно!
Nomina sunt odiosa
Re[3]: ASP.NET MVC Как загрузить список только один раз
От: Neco  
Дата: 25.05.11 13:01
Оценка: 3 (1)
Здравствуйте, Lucio, Вы писали:

L>Здравствуйте, Хэлкар, Вы писали:


Х>>Кэшировать в сессии?


L>Спасобо тебе огромное!!! ТО что нужно!

учтите, что с сессией можете нагрести немножко проблем в случаях, когда пользователь открывает две страницы браузера и работает паралелльно.
я больше склонен к сериализации объекта и помещении его в hidden — аналог вебформового viewstate. либо гибрид — на форме хранить уникальный для текущего редактирования ключ по которому искать в сессии, но это само по себе уже сложнее, чем просто viewstate.
всю ночь не ем, весь день не сплю — устаю
Re[4]: ASP.NET MVC Как загрузить список только один раз
От: cadet354 Россия
Дата: 25.05.11 13:25
Оценка: 3 (1)
Здравствуйте, Neco, Вы писали:

N>учтите, что с сессией можете нагрести немножко проблем в случаях, когда пользователь открывает две страницы браузера и работает паралелльно.

еще можно вспомнить проблемы возникающие при хранении данных сессии не в Inproc.
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re[5]: ASP.NET MVC Как загрузить список только один раз
От: Lucio Россия  
Дата: 25.05.11 15:44
Оценка:
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, Neco, Вы писали:


N>>учтите, что с сессией можете нагрести немножко проблем в случаях, когда пользователь открывает две страницы браузера и работает паралелльно.

C>еще можно вспомнить проблемы возникающие при хранении данных сессии не в Inproc.

То есть

        ...
        [OutputCache(Duration=180)]
        public ActionResult GetPartnerList()
        {
            var query = storeDB.partners.OrderBy(a => Guid.NewGuid()).Take(10);
            return PartialView(query);
        }
        ...

не совсем то что нужно?
Nomina sunt odiosa
Re[6]: ASP.NET MVC Как загрузить список только один раз
От: cadet354 Россия
Дата: 26.05.11 07:02
Оценка: 3 (1)
Здравствуйте, Lucio, Вы писали:


L>То есть


L>
L>        ...
L>        [OutputCache(Duration=180)]
L>        public ActionResult GetPartnerList()
L>        {
L>            var query = storeDB.partners.OrderBy(a => Guid.NewGuid()).Take(10);
L>            return PartialView(query);
L>        }
L>        ...
L>

L> не совсем то что нужно?
моя реплика была к тому что хранить эти данные в сессии иногда бывает плохо.
возвращаясь к кешу, то тут у тебя для всех клиентов будет кешироваться один и тот же список список. Тут надо смотреть тогда в сторону VaryByXXX, а этот XXX уже передавать как зеницу ока через все страницы
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.