Опресняване на ViewData в метод, който връща Json

Имам контролер с метод, който връща частичен изглед и генерира ViewData. След това имам някои методи, всеки от които връща Json обекти и ViewData. Но ViewData не се опреснява. Как да го освежа? Възможно ли е това?

public ActionResult FirstMethod() {
    ViewData["someList"] = ...;
    return PartialView(someOtherList);
}

public JsonResult SomeMethod()
{
    ViewData["someNewList"] = ...;
    return new JsonResult { ... };
}

Но въпреки че SomeMethod() се извиква след FirstMethod(), ViewData, който използвам в моя изглед, е someList.


person petko_stankoski    schedule 29.05.2012    source източник
comment
@Марк Да. Редактирах въпроса.   -  person petko_stankoski    schedule 29.05.2012
comment
ViewData ще бъде изчистен при всяка заявка, както е обяснено от @Darin и не е необходимо да правите това ръчно. Обикновено всяко действие (освен ако не е дъщерно действие) съответства на заявка на браузър. Така че, ако зададете някаква стойност на ViewData в едно действие, тя няма да бъде налична в друго.   -  person VJAI    schedule 29.05.2012


Отговори (1)


Възможно ли е това?

Не, не е възможно. ViewData е слабо въведен речник, който може да се използва (въпреки че не бих препоръчал използването му) за предаване на информация между контролер и изглед. Неговият живот е свързан с този на тръбопровода за изпълнение на действие на контролера. Така че след като изгледът е изобразен, всичко е свършено. Вече не съществува контролер, изглед, ViewData, ... Само HTML, изобразен в клиентския браузър.

След това отново изпращате AJAX заявка до сървъра. Това е напълно нова заявка, която няма нищо общо с първата (която беше използвана за изобразяване на изгледа първоначално) и по този начин се създава нов екземпляр на контролера със собствен ViewData. Задаването на ViewData в действие на контролер, което връща JSON, е безполезно, защото тъй като това действие ще бъде извикано с javascript, цялата информация, която искате да предадете от контролера към манипулатора за успех на javascript, трябва да бъде част от JSON обекта, който връщате.

person Darin Dimitrov    schedule 29.05.2012
comment
Защо не препоръчвате да използвате ViewData? - person petko_stankoski; 29.05.2012
comment
Защото е слабо написано. Препоръчвам да използвате модели за преглед. - person Darin Dimitrov; 29.05.2012