Вызов SaveTempData, хотя сеанс отключен - PullRequest
2 голосов
/ 01 апреля 2011

Я отключил sessionState в своем приложении mvc2 через web.config, а также создал свой собственный контроллерзавод и фиктивный поставщик временных данных, как описано здесь:

Как отключить состояние сеанса в ASP.NET MVC?

Только я сделал так, чтобы SaveTempData генерировал исключение:

 public void SaveTempData(ControllerContext controllerContext, 
                          IDictionary<string, object> values)
    {
        throw new NotImplementedException(
        "Cannot set tempdata, no session state is available.");
    }

Я убедился, что ни один код никогда не использует ни Session, ниОбъекты TempData, но я все еще вижу, как это исключение выдается после возникновения события OnResultExecuted.Я использовал этот самый шаблон на своем сайте mvc1 и никогда не видел исключения.Любые идеи?

Если я изменю свою реализацию "SaveTempData" на это:

public void SaveTempData(ControllerContext controllerContext, 
                         IDictionary<string, object> values)
    {
        if (values.Count != 0)
        {
            throw new NotImplementedException(
            "Cannot set tempdata, no session state is available.");
        }
    }

Все работает как положено - я просто надеюсь узнать, почему SaveTempData вызывается вообще, когда я 'я его нигде не использую.

Обновление

Обнаружена эта статья: http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

В которой объясняется, что ExecuteCore вызывает PossibilityLoadTempData и PossblySaveTempData вокруг действиячто и стало причиной моей проблемы.Это новое дополнение в mvc2 против mvc1?

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Открыл эту статью: http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

Что объясняет, что ExecuteCore вызывает PossibilityLoadTempData и PossblySaveTempData вокруг действия - именно это и стало причиной моей проблемы. Это новое дополнение в mvc2 против mvc1?

1 голос
/ 02 апреля 2011

Вот как это реализовано в методе Controller.ExecuteCore. Методы LoadTempData и SaveTempData всегда будут вызываться до и после каждого действия, поэтому убедитесь, что они не выдают исключение. Чтобы эффективно отключить сеанс, я бы порекомендовал вам добавить в ваш web.config следующее:

<sessionState mode="Off" />
...