Могу ли я использовать ViewState, чтобы исключить необходимость передавать строку запроса?
Вопрос
У меня есть страница с несколькими расширяемыми списками.В идеальном мире я хотел бы отображать ссылки на каждый из этих списков, и при нажатии на один из них будет перезагружена страница с отображением этого конкретного списка.Я читал, что ViewState может устранить необходимость в скрытых полях ввода, строках запроса и т.д., но я не знаком с этой концепцией.
По сути, мне нужно выполнить две вещи:
- Добавьте идентификатор списка в ViewState obj при нажатии на ссылку
- Считывает идентификатор из ViewState obj при загрузке страницы, отображает этот список
Кто-нибудь может предоставить мне некоторые ресурсы и / или помощь по этой теме?Спасибо!
Решение
ViewState - это, по сути, одно длинное закодированное скрытое поле, хранящееся в верхней части вашей страницы.Ключевое различие между этим и обычным скрытым полем заключается в том, что ASP .NET расшифрует его и проанализирует автоматически при обратной передаче.
Есть лучшие способы достичь того, что вы хотите сделать.
- Вы могли бы использовать строку запроса.Все, что вы передаете, - это идентификатор списка.Добавьте идентификатор списка в конец ваших ссылок и найдите его на странице Page_Load.Загрузите соответствующий список, если вы его найдете.Вам нужно будет обработать случай, когда идентификатор списка не передается. Строка запроса не является злой.Это может значительно помочь снизить вес страницы.При использовании с приличным Переписчик URL-адресов, Таким образом, вы получаете большой контроль над тем, что передается ( и, что особенно важно, над тем, что нет).
- Если вы используете ASP .СЕТЕВЫЕ элементы управления ( такие как Button или LinkButton ) для запуска отображения списка, вы можете установить свойство CommandArgument и выбрать его в коде события.Затем вы можете передать это в качестве параметра любому методу или элементу управления, обрабатывающему визуализацию вашего списка.
Другие советы
ViewState используется для хранения информации на одной странице между постами, а не для передачи аргументов между страницами.
Вы можете передавать аргументы между страницами, используя:
<Ол>Ни один из этих методов не будет автоматически добавлять данные в ViewState запрашиваемой страницы. Я полагаю, что из них только # 2 работает с прямыми ссылками HTML (GET), остальные обычно включают постбэк (POST).
На запрашиваемой странице вам всегда понадобится какой-либо метод установки ViewState ( ViewState [" Id "] = source.Id ).
Практическое руководство. Передача значений между веб-страницами ASP.NET р>