Давайте сделаем это просто! : -)
Вы задали следующие вопросы:
Я хочу поддерживать состояние модели между вызовами методов на контроллере.
Это возможно?
Ответ: Да, это
Контроллер создается при вызове некоторых его методов и уничтожается, когда вызываемый метод заканчивает свое выполнение?
Ответ: да, он не сохраняется ни в каком состоянии - он просто возвращает результат, сгенерированный действием
Если нет ... как я могу поддерживать состояние между вызовами методов? Если это возможно ... как это должно быть написано?
Ответ:
У нас была такая же проблема в нашем текущем бизнес-приложении с использованием 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"];
}
В конце дня. Это зависит от вас и вашей команды, что лучше всего соответствует требованиям.