Поддержание состояния в контроллере MVC2 - PullRequest
0 голосов
/ 24 сентября 2010

Я хочу поддерживать состояние модели между вызовами методов на контроллере.
Возможно ли это?

Контроллер создается при вызове некоторых его методов и уничтожается привызываемый метод завершает свое выполнение?

Если нет ... как я могу поддерживать состояние между вызовами метода?Если это возможно ... как это должно быть написано?

спасибо

Ответы [ 4 ]

3 голосов
/ 24 сентября 2010

Давайте сделаем это просто! : -)

Вы задали следующие вопросы:

Я хочу поддерживать состояние модели между вызовами методов на контроллере.

Это возможно?

Ответ: Да, это

Контроллер создается при вызове некоторых его методов и уничтожается, когда вызываемый метод заканчивает свое выполнение?

Ответ: да, он не сохраняется ни в каком состоянии - он просто возвращает результат, сгенерированный действием

Если нет ... как я могу поддерживать состояние между вызовами методов? Если это возможно ... как это должно быть написано?

Ответ:

У нас была такая же проблема в нашем текущем бизнес-приложении с использованием ASP.NET MVC2, и мы предложили следующие решения:

Решение (ы):

1-й он-пробная версия для этого приложения содержала некоторые специальные функции, использующие глобальный Session . (Обратите внимание, что сеанс сохраняется на веб-сервере)

Сохранение и чтение из сеанса в ASP.NET MVC:

public Action SaveIntoSession()
{
  ...
  Session["SessionData"] = "Something to be stored in session";
  ...
}

public action ReadFromSession()
{
  ...
  // UNBOXING is required when you're using the session as ASP.NET doesn't know what is stored into the session
  string sessionData = (string)Session["SessionData"]; 
 ...
}

2nd Есть еще одна концепция сохранения необходимой информации для каждого запроса в таблице сеансов в вашей базе данных. (Но я не буду вдаваться в подробности ... проверьте эту статью для получения дополнительной информации - хотя это php, вы можете довольно легко разобраться с концепцией)

3-й будет использовать TempDataDictionary , как упомянуто Чарлино. Проблема в том, что он сохраняет состояние только от одного вызова к другому. Все сохраненные данные будут удалены при следующем запросе. (TempData в основном используется для отображения ошибок пользователю ..)

public Action SaveIntoTempData()
{
  ...
  TempData["TempData"] = "Something to be stored ONE request ONLY";
  ...
}

public Action ReadFromTempData()
{
   ...
   string tempData = (string)TempData["TempData"];
}

4th Вы также можете использовать ViewDataDictionary . Не рекомендуется использовать с конфиденциальными данными. (проверьте эту тему для получения дополнительной информации)

public Action SaveIntoViewData()
{
  ...
  TempData["ViewData"] = "Something to be stored into the page";
  ...
}

public Action ReadFromViewData()
{
   ...
   string viewData = (string)ViewData["ViewData"];
}

В конце дня. Это зависит от вас и вашей команды, что лучше всего соответствует требованиям.

2 голосов
/ 24 сентября 2010

У вас есть доступ к стандартному сеансу ASP.NET, даже в MVC.Проверьте документы .

1 голос
/ 24 сентября 2010

Подойдет ли TempData / TempDataDictionary ?

HTHS
Charles

0 голосов
/ 24 сентября 2010

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

По умолчанию я не думаю, что MVC поддерживает состояние между вызовами.

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