Могу ли я изменить URL-адрес браузера при сохранении ViewState в ASP.NET? - PullRequest
1 голос
/ 17 ноября 2009

Я провожу мозговой штурм для инфраструктуры портала и представляю стек навигации, который отслеживается с помощью ViewState (так что если пользователь нажимает «назад» в своем браузере и нажимает какую-то другую ссылку, то используется хлебная крошка) след будет отходить от правой страницы). Мои страницы - это просто элементы управления ascx, которые загружаются в элемент управления заполнителя на главной странице портала на основе URL-адреса. Когда пользователь щелкает ссылку на портал, возникает обратная передача, которая загружает исходную страницу и вызывает обработчик «щелкнул» данной ссылки, который должен затем «вставить» текущее местоположение в стек хлебных крошек, прежде чем отправлять браузеру инструкцию по перенаправлению, чтобы изменить URL той страницы, на которую я хочу перейти.

Это мой мозговой штурм на данный момент, потому что, как только мы выполняем перенаправление, мы теряем ViewState. Вместо перенаправления я подумал о том, чтобы просто сказать своей главной странице портала заменить текущий элемент управления страницей на целевой элемент управления страницы, избегая, таким образом, дополнительного обхода http и позволяя мне сохранить ViewState. Но тогда весь мой опыт работы с сайтом происходит в контексте одного URL, поэтому я теряю закладку URL среди прочего. И если я оберну некоторые из своих элементов управления в панели AJAX, весь сайт будет обрабатываться одним запросом страницы, если говорить об истории браузера.

Что мне хотелось бы, так это как-то вести журнал посещений и вести себя так, как будто каждая ссылка ведет их на новую страницу с описательным URL и т. Д., Но все же есть какой-то способ узнать путь, по которому прошел пользователь чтобы перейти на страницу, на которой они находятся (ViewState, кажется, самый простой способ отследить это).

Может кто-нибудь предложить некоторые методы, которые я мог бы попробовать использовать?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2009

Я бы посмотрел на использование куки. По соображениям производительности вы действительно хотите избегать перенаправлений HTTP, если можете, и ViewState работает, только если пользователь отправляет форму, а не для обычных ссылок.

Вы можете сделать что-то вроде сохранения нескольких списков путей в файлах cookie, которые показывают путь, который пользователь выбрал для перехода с одной страницы на другую. Возможно, вы устанавливаете уникальный идентификатор для каждой страницы, который применяется некоторым JavaScript в качестве строки запроса, когда пользователь щелкает ссылку, и сервер использует этот идентификатор и прошлую историю из файлов cookie, чтобы определить, как отобразить крошку хлеба на странице. следующая страница?

0 голосов
/ 18 ноября 2009

Первое предложение ... Вы можете заглянуть в ASP.NET MVC. Тем не менее, я должен признать некоторое невежество здесь, так как я не уверен, что это действительно решит вашу проблему. Но это звучит как то, для чего MVC подойдет.

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

В-третьих ... Я думаю, что вы можете переосмыслить часть вашего дизайна. ViewState действительно служит одной цели: он воссоздает состояние страницы в том виде, в каком оно существовало, когда страница отображалась для пользователя. Если вы переходите на другую страницу или новый набор элементов управления, зачем вам вообще нужен ViewState? Сам по себе ViewState - это просто взлом с самого начала ... способ ASP.NET поддерживать состояние поверх системы без сохранения состояния. (но это целое «другое обсуждение») У нас есть другие методы поддержания состояния ... основным механизмом является объект Session. Почему бы вместо этого не сохранить там свои данные breaacrumb?

...