ASP.net ViewState - Даже если он отключен, некоторые viewstate существуют.Почему?

StackOverflow https://stackoverflow.com/questions/413558

  •  03-07-2019
  •  | 
  •  

Вопрос

Даже когда на странице свойство EnableViewState отключено, я все еще вижу некоторое viewstate, существующее на странице:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

Мой вопрос в том, почему?

Это было полезно?

Решение

Это могут быть элементы управления, которые используют ControlState. Любой элемент управления, имеющий состояние элемента управления, будет игнорировать ваши настройки ViewState.

Другие советы

Это состояние контроля.

Если вы действительно хотите избавиться от viewstate и controlstate, вы можете использовать этот код в коде для страницы или в любом классе, из которого этот код является производным

class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

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

Редактировать: Поскольку я был отвергнут, я хотел бы еще раз подчеркнуть:Не делайте этого, если вы точно не знаете, что делаете.В моем случае почти все приложение было написано на клиентском javascript, и в тех немногих случаях, когда происходили обратные отправки, я всегда использовал Request .Form collection для извлечения значений. Если вы делаете это, не используйте элементы управления на стороне сервера ни для чего, кроме простого рендеринга.

Эта статья немного устарела, но, насколько я понимаю, большинство пунктов остаются в силе:

<Ол>
  • Если вы хотите использовать ViewState, на вашей странице ASPX должен быть тег формы сервера (). Поле формы является обязательным, чтобы скрытое поле, содержащее информацию ViewState, можно было отправить обратно на сервер. И это должна быть форма на стороне сервера, чтобы структура страницы ASP.NET могла добавить скрытое поле при выполнении страницы на сервере.
  • Сама страница сохраняет около 20 байт информации во ViewState, которую она использует для распространения данных PostBack и значений ViewState в правильные элементы управления при обратной передаче. Таким образом, даже если ViewState отключен для страницы или приложения, вы можете увидеть несколько оставшихся байтов в ViewState.
  • В тех случаях, когда страница не отправляется обратно, вы можете удалить ViewState со страницы, пропустив тег на стороне сервера.
  • http://msdn.microsoft.com/en-us/library /ms972427.aspx

    Это совершенно фантастическая статья на ViewState , если вы разрабатываете в ASP.NET, прочитайте его!

    ASP.NET ViewState Helper также является хорошим инструментом для наблюдения за тем, что происходит в вашем ViewState

    Controlstate может быть причиной. Контроль состояния не может быть отключен. В ASP.NET 2.0 существует различие между данными, необходимыми для работы элемента управления (controlstate), и другими данными (viewstate)

    И да, некоторые элементы управления не работают без состояния управления. Если вы хотите узнать, какая из них является причиной или что представляет собой состояние просмотра, посмотрите средство просмотра состояния просмотра

    Элементы управления, которые реализуют IPostBackEventHandler , такие как Текстовое поле, Флажок и т. д. . сохранит состояние даже после отключения режима просмотра. Причина заключается в том, что на этапе загрузки данных обратной передачи эти элементы управления будут получать информацию о состоянии из формы обратной отправки.

    Но элементы управления, такие как label , которые не реализуют IPostBackEventHandler , не будут получать никакой информации о состоянии из отправленных данных и, следовательно, полностью зависят от состояния представления для поддержания состояния.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top