Могу ли я использовать ViewState, чтобы исключить необходимость передачи строки запроса? - PullRequest
2 голосов
/ 30 июля 2009

У меня есть страница с несколькими расширяемыми списками. В идеальном мире я хотел бы отобразить ссылки на каждый из этих списков, и при щелчке по одному из них перезагрузится страница с отображенным конкретным списком. Я читал, что ViewState может устранить необходимость в скрытых полях ввода, строках запросов и т. Д., Но я не знаком с этой концепцией.

В основном мне нужно выполнить две вещи:

  1. Добавить идентификатор списка в ViewState obj при нажатии на ссылку
  2. Считывание идентификатора из ViewState obj при загрузке страницы, отображение этого списка

Может ли кто-нибудь предоставить мне некоторые ресурсы и / или помощь по этой теме? Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

ViewState - это одно длинное закодированное скрытое поле, которое хранится в верхней части вашей страницы. Основное различие между этим и обычным скрытым полем состоит в том, что ASP .NET будет декодировать его и автоматически анализировать при обратной передаче.

Есть лучшие способы достичь того, что вы хотите сделать.

  • Вы можете использовать строку запроса. Все, что вы передаете, это список ID. Добавьте идентификатор списка в конец ваших ссылок и найдите его в Page_Load. Загрузите соответствующий список, если вы его найдете. Вы захотите обработать случай, когда идентификатор списка не передается. Строка запроса не является злой . Это может существенно помочь уменьшить вес страницы. При использовании с приличным переписчиком URL вы получаете большой контроль над тем, что передается (и, что важно, что нет)
  • Если вы используете элементы управления ASP .NET (например, Button или LinkButton) для запуска отображения списка, вы можете установить свойство CommandArgument и выбрать его в коде события. Затем вы можете передать это в качестве параметра любому методу или элементу управления, обрабатывающему рендеринг списка.
1 голос
/ 30 июля 2009

ViewState используется для хранения информации на одной странице между постами, а не для передачи аргументов между страницами.

Вы можете передавать аргументы между страницами, используя:

  1. Session
  2. Строка запроса
  3. печенье
  4. Пользовательская база данных
  5. Постбэки между страницами

Ни один из этих методов не будет автоматически добавлять данные в ViewState запрашиваемой страницы. Я полагаю, что из них только # 2 работает с прямыми ссылками HTML (GET), остальные обычно включают постбэк (POST).

На запрашиваемой странице вам всегда понадобится какой-то метод ViewState ( ViewState ["Id"] = source.Id ).

Как передать значения между веб-страницами ASP.NET

...