Переменные сеанса не сохраняются при начальной загрузке страницы - PullRequest
0 голосов
/ 25 марта 2011

У меня есть приложение MVC, которое устанавливает некоторые переменные сеанса на основе внутренних статических IP-адресов.

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

Однако приведенный ниже код, который является лишь фрагментом моего кода, но отредактирован для моего поста, работает только частично. При начальной загрузке страницы переменные сеанса не сохраняются, но после обновления страницы они сохраняются. У меня проблема в том, что они должны быть сохранены при начальной загрузке страницы.

If Session("Item1") = Nothing Then
                If IpAddressShort <> "" Then
                    Dim locInfo = cmsRepository.GetInfoBasedOnLocation(IpAddressShort).SingleOrDefault()

                    If locInfo IsNot Nothing Then
                        Session("Item1") = locInfo.Item1
                        Session("Item2") = locInfo.Item2
                        Session("Item3") = locInfo.Item3
                        Session("Item4") = locInfo.Item4

                        If locInfo.Item2= "1" Then
                            Session("Visibility") = 3
                            Session("TypeShort") = "XXXX"
                        ElseIf locInfo.Item2= "2" Then
                            Session("Visibility") = 4
                            Session("TypeShort") = "YYYY"
                        ElseIf locInfo.Item2= "9" Then
                            Session("Visibility") = 2
                            Session("TypeShort") = "ZZZZZ"
                        End If

                    End If
                End If
            End If

Теоретически, если я прав, если нет Session("Item1") set /, если Session("Item1") пусто, тогда остальная часть фрагмента должна запуститься и установить эти переменные.

Почему это не устанавливает эти переменные при первой загрузке страницы?

Спасибо за любую помощь заранее

Ответы [ 2 ]

1 голос
/ 25 марта 2011

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

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

0 голосов
/ 25 марта 2011

Документация для OnActionExecuted состояния:

Вызывается после вызова метода действия.

В вашем начальном вызове данных нет, потому что действие еще не завершено. T OnActionExecuted еще не запущен, потому что он будет запущен после завершения вашего действия. Во второй раз, потому что OnActionExecuted запущен с последнего действия.

То, что вы хотите, это OnActionExecuted , который гласит:

Вызывается до вызова метода действия.

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

Это отличная статья, объясняющая жизненный цикл ASP.NET MVC:

http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/

...