В каких возможных ситуациях .net Viewstate может перестать работать? - PullRequest
1 голос
/ 09 января 2009

Рассмотрим следующий код:

    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. Я не могу понять, что происходит. : \

О, я только что понял это. Посмотри, заметишь ли ты.

. <</p>

Ответы [ 5 ]

3 голосов
/ 09 января 2009

Понял, кто-то изменил событие Page_Load для обработки Page.Init

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
1 голос
/ 30 августа 2010

В моем случае я записывал данные в ViewState на Page_Init. Эти данные хорошо отображались на Page_Load и Page_PreRender, но не сохранялись на странице в конце жизненного цикла. После обратной передачи ViewState был пуст.

Итак, не забудьте написать в ViewState ПОСЛЕ Page_Init.

1 голос
/ 09 января 2009

Так как вы не ответили на свой пост ...

Я бы сказал, что вы проверяете IsPostBack и обращаетесь к ViewState на неправильных этапах:

Handles Me.Init

Это должно быть

Handles Me.Load

право


Для отладки таких проблем в ASP.NET я также хотел бы добавить, что трассировка часто помогает.

Вы можете включить трассировку, добавив это в web.config:

<configuration>
  <system.web>
    <trace enabled="true" pageOutput="true" requestLimit="40" localOnly="false"/>
  </system.web>
</configuration>

Это добавит трассировку стека и еще много чего к концу каждой страницы, так что вы сможете отслеживать выполнение и (надеюсь) выяснить проблему.

1 голос
/ 09 января 2009

Вы УВЕРЕНЫ, что делаете постбэк?

Это пишет "Viewstate is empty"? Или просто ничего?

1 голос
/ 09 января 2009

Вы также можете отключить viewstate из файла конфигурации.

<configuration>
  <appSettings>
    <Pages EnableViewState="false" />
  </appSettings>
</configuration>
...