постоянные ссылки на странице asp.net - это работа для viewstate? - PullRequest
1 голос
/ 29 декабря 2010

У меня есть главная страница с разделом для ссылок субнавигации:

<div id="sub_nav" runat="server"></div>

Я заполняю это программно Гиперссылками, когда мой основной asp: данные меню связаны в зависимости от адреса страницы, на которой я нахожусь.

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

Теперь я мог бы просто заполнять div ссылками каждый раз, независимо от того, является ли загрузка главной страницы обратной передачей или нет, но я подумал, что есть лучший способ сделать это. Я думал, что включение viewstate на div и ссылки внутри него могут сохранять их через постбэки, но, очевидно, это не то, как viewstate работает.

Как правильно это сделать?

Ответы [ 3 ]

4 голосов
/ 29 декабря 2010

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

2 голосов
/ 29 декабря 2010

Согласно превосходной статье НАСТОЯЩЕЕ Понимание ViewState , это не совсем цель ViewState. Кроме того, ViewState требует дополнительной пропускной способности, поэтому в целом мы хотим избежать ее, если это возможно. Похоже, эти данные должны быть «дешевыми», чтобы их можно было получить (кэшировать или еще что-то), поэтому я определенно заполняю их при каждом запросе и отключаю ViewState для этих элементов управления.


Чтобы понять основное назначение ViewState, рассмотрим страницу с двумя кнопками btnA и btnB и двумя метками lblA и lblB.

Когда пользователь нажимает кнопку btnA, страница отправляется обратно и устанавливает для lblA значение «Вы нажали A!».
Когда пользователь нажимает кнопку btnB, страница отправляется обратно и устанавливает для lblB значение «Вы нажали B!».

При использовании ViewState страница запоминает, что для lblA.Text было установлено «Вы нажали A!» ранее и восстанавливает это значение. Без ViewState, если пользователь нажмет A, а затем B, на странице будет отображаться только «Вы нажали B!» потому что нечего хранить предыдущее значение lblA.

2 голосов
/ 29 декабря 2010

Этот образец MSDN должен вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...