Давайте держать это просто! :-)
Вы спросили следующие вопросы:
Я хочу, чтобы поддерживать состояние модели между вызовами метода на контроллере.
Возможно ли это?
Ответ:да, это
Контроллер создан при вызове некоторых из его методов и разрушается, когда вызываемый метод завершения ее выполнения?
Ответ:да, она не сохраняется какое-либо государство - это просто возвращает результат, созданный действием
Если нет ... Как я могу поддерживать состояние между вызовами методов? Если это возможно ... как это должно быть написано?
Ответ:
У нас была такая же проблема в нашей текущей бизнес-приложений с использованием ASP.NET MVC2 и придумал следующие решения:
решение (ы):
1 он Proof-Of-Concept для этого приложения содержал некоторые специальные функции, используя глобальный сеанс .(Обратите внимание, что сессия сохраняется на веб-сервере)
Сохранение и чтение из сессии в 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"];
...
}
второй Там другая концепция сохранения необходимой информации для каждого запроса в таблицу сессии в вашей базы данных. (Но я не буду заходить слишком глубоко в это .. проверьте this article для получения дополнительной информации - хотя это php, вы можете легко обдумать концепцию)
3 Будет использовать TempDataDictionary, как упоминалось в Charlino. Проблема заключается в том, что он только сохраняет состояние от одного вызова другому. Все данные, которые будут сохранены, будут удалены следующим запросом. (TempData в основном используется для отображения ошибок для пользователя ..)
public Action SaveIntoTempData()
{
...
TempData["TempData"] = "Something to be stored ONE request ONLY";
...
}
public Action ReadFromTempData()
{
...
string tempData = (string)TempData["TempData"];
}
четвёртых Вы можете также использовать ViewDataDictionary. Не рекомендуется использовать конфиденциальные данные. (Проверить this thread для получения дополнительной информации)
public Action SaveIntoViewData()
{
...
TempData["ViewData"] = "Something to be stored into the page";
...
}
public Action ReadFromViewData()
{
...
string viewData = (string)ViewData["ViewData"];
}
В конце дня. Это зависит от вас и вашей команды, что наилучшим образом соответствует требованиям.
TempData выживет только при перенаправлении, так что в этом случае он не будет работать. – Ryan
Вопрос состоял в том, чтобы * поддерживать состояние между вызовами методов * - Я думаю, что TempData это усложняет. Да? Конечно, есть и другие способы, но немного слепо сказать, что в этом случае он не будет работать с учетом двусмысленности или вопроса. – Charlino
Извините, я думал, что «между вызовами метода» подразумеваются отдельные вызовы из браузера. – Ryan