2012-02-15 3 views
1

У меня есть сайт ASP.NET 4.0. На сайте есть элемент управления TreeView внутри UpdatePanel.ASP.NET 4.0, ScriptManager и HistoryPoints

Имейте в виду - , когда пользователь впервые посещает страницу, не было возвращено сообщение (подробнее об этом через минуту).

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

Есть два поведения, я вижу, и я озадачен о том, как исправить эти:

  • Во-первых, точки истории всегда, кажется, указывают на текущий. Если я начну с пункта A, а затем нажмите элемент B, когда я нажму кнопку «Назад», я завершаю элемент B на пару кликов (как если бы все точки истории были установлены на одно и то же значение). Я думал, что история должна быть запущенным списком узлов, которые пользователь нажал ... но в этом случае кажется, что список всегда представляет собой набор точек истории с текущим идентификатором. (Если кто-нибудь знает, как выставить коллекцию исторических точек в scriptmanager, я бы с удовольствием услышал, как это сделать.)
  • Во-вторых, и больше из-за головной боли, это то, что когда дерево первоначально загружается, нет обратной передачи. Есть ли способ установить точку истории без обратной передачи Ajax? (Я хотел бы иметь способ сохранить состояние по умолчанию для дерева, но сейчас перейду к элементу A из корня, а затем щелкнуть назад, чтобы пользователь заходил на любую страницу, на которой они были, до попадания моей страницы)

Кто-нибудь еще заметил странное поведение с точками истории ScriptManager?

Я также думал об альтернативах - например, о представлении, скрытых полях, куках, переменных сеанса ... но мне не повезло ни с одним из решений, которые я пробовал. Есть ли способ заставить кнопку «Назад» работать без точек истории? (Я не думаю, что есть)

ответ

2

Чтобы установить точку истории без обратной передачи, вы вызываете ScriptManager.AddHistoryPoint().

Я бы рискнул предположить, что добавление ваших точек истории не является проблемой, но в ScriptManager.Navigate, вы неправильно загружаете состояние назад, или, может быть, вы полагаетесь на информацию о сеансе, которая уже обновлена ​​до пункта B.

Одним из способов увидеть, что находится в состоянии истории, является предоставление каждой записи истории имени/названия, достаточно описательного, чтобы идентифицировать состояние страницы. Для тестирования вы можете использовать сокращенную версию хэша строки состояния или просто создать строку для определения состояния страницы, а затем, когда вы нажмете и удерживаете кнопку «Назад», чтобы просмотреть историю последних браузеров, вы увидите страницы с описательными именами чтобы идентифицировать их.

Вот страница MSDN говорить о том, что: http://msdn.microsoft.com/en-us/library/cc472966.aspx

КСТАТИ: К сожалению, я опоздал на этот вопрос. Если у вас все еще есть проблемы, отправьте код, чтобы мы могли видеть, что вы делаете. Я реализовал функцию точки истории на страницах с деревом в панели обновления на нескольких моих страницах.

Смежные вопросы