У меня есть приложение ASP.NET/C#.
Приложение содержит PlaceHolder внутри UpdatePanel .
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click"/>
<asp:AsyncPostBackTrigger ControlID="LinkButton2" EventName="Click"/>
<asp:AsyncPostBackTrigger ControlID="LinkButton3" EventName="Click"/>
</Triggers>
<ContentTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
В основном, я загружаю элементы управления в заполнитель в зависимости от того, что LinkButton был нажат с помощью функции
LoadControls("ControlName");
Я хочу реализовать возможность для пользователя использовать Кнопка возврата браузера
для того, чтобы перемещаться по элементам управления. поэтому я использовал AJAX History следующим образом:
Я сохраняю текущий идентификатор элемента управления в переменной сеанса
Session["current"]
Я включаю History в scriptmanager и добавляю обработчик событий
<asp:ScriptManager ID="ScriptManager" runat="server" EnableHistory="True" onnavigate="ScriptManager_Navigate" />
(обработчик события будет описан ниже)
Сначала я создам новую точку истории в обработчике событий кнопок Link (все они используют один и тот же обработчик)
string ControlId=Session["current"].ToString();
if (ScriptManager.IsInAsyncPostBack && !ScriptManager.IsNavigating)
{
ScriptManager.AddHistoryPoint("Hist", ControlId);
}
затем в Scriptmanager обработчик навигации
protected void ScriptManager_Navigate(object sender, HistoryEventArgs e)
{
string Controlid = "";
if (e.State["index"] != null)
{
Controlid = e.State["Hist"].ToString();
LoadControls(Controlid );
}
}
Когда я загружаю элементы управления, я могу перемещаться вперед и назад, и все работает нормально
Вот проблема:
1) первая проблема
Первый раз, когда я нажимаю «Назад». история возвращает 2 шагов, а не один (после этого она работает нормально.) Как будто последняя история не сохраняется.
2) вторая проблема
После «Backing» на первом шаге я могу сделать дополнительный «Back», где e.State [«Hist»] будет нулевым и выдаст мне ошибку. как отключить кнопку «Назад в браузере», когда значение e.State [«Hist»] будет нулевым?
Большое спасибо за любую помощь. Я надеюсь, что я был ясен.
Если вам нужна дополнительная информация / код, я с радостью предоставлю их