2010-09-23 3 views
0

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

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

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

благодаря

ответ

3

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

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

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

Возможно ли это?

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

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

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

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

Ответ:

У нас была такая же проблема в нашей текущей бизнес-приложений с использованием 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"]; 
} 

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

0

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

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

1

Будет TempData/TempDataDictionary подходит?

HTHS,
Чарльз

+0

TempData выживет только при перенаправлении, так что в этом случае он не будет работать. – Ryan

+0

Вопрос состоял в том, чтобы * поддерживать состояние между вызовами методов * - Я думаю, что TempData это усложняет. Да? Конечно, есть и другие способы, но немного слепо сказать, что в этом случае он не будет работать с учетом двусмысленности или вопроса. – Charlino

+0

Извините, я думал, что «между вызовами метода» подразумеваются отдельные вызовы из браузера. – Ryan

2

У вас есть доступ к стандартной сессии ASP.NET, даже в MVC. Проверьте the docs.

Смежные вопросы