Каковы возможные ситуации, в которых .net Viewstate может перестать работать?
Вопрос
Рассмотрим следующий код:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Page.IsPostBack Then
If ViewState("test") IsNot Nothing Then
Response.Write((ViewState("test").ToString))
Else
Response.Write("Viewstate is empty.")
End If
Else
ViewState("test") = "viewstate is working."
End If
End Sub
Этот код не работает на определенной странице в моем приложении.Viewstate не отключен в директиве Page.Я не могу понять, что происходит.:\
О, я только что понял это.Посмотрим, заметите ли вы это.
.<
Решение
Понял это, кто-то изменил событие Page_Load на обработку Page.Init
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Другие советы
Вы также можете отключить viewstate из конфигурационного файла.
<configuration>
<appSettings>
<Pages EnableViewState="false" />
</appSettings>
</configuration>
Вы УВЕРЕНЫ, что делаете обратную отправку?
Написано ли в нем "Viewstate пуст"?Или просто ничего?
Поскольку вы не ответили на свой собственный пост...
Я бы сказал, что вы проверяете IsPostBack и получаете доступ к ViewState на неправильных этапах:
Handles Me.Init
Это должно быть
Handles Me.Load
верно?
Для устранения таких головных болей в ASP.NET Я также хотел бы добавить, что трассировка can часто очень помогает.
Вы можете включить трассировку, добавив это в web.config:
<configuration>
<system.web>
<trace enabled="true" pageOutput="true" requestLimit="40" localOnly="false"/>
</system.web>
</configuration>
Это добавит трассировку стека и еще много чего в конец каждой страницы, так что вы сможете отследить выполнение и (надеюсь) выяснить проблему.
В моем случае я записывал данные в ViewState на Page_Init .Эти данные хорошо отображались на Page_Load и Page_PreRender, но они не сохранялись на странице в конце жизненного цикла.После обратной передачи ViewState был пуст.
Итак, убедитесь, что вы пишете в ViewState ПОСЛЕ Page_Init .