Я пытаюсь отслеживать навигацию между несколькими веб-формами в ASP.NET. Я пытался стороне клиента обратно навигации, используя следующие:Обратная связь ASP.NET для нескольких форм
<asp:Button ID="BackButton" runat="server" Text="Back"
OnClientClick="JavaScript:window.history.back(1);return false;" />
К сожалению, это не работает для моего сценария из-постбэков происходит. Мой сценарий имеет ряд веб-форм:
- Page1.1
- Page1.2
- Page2
- Page3
Перемещение вперед по страницам работает аналогично мастера. Есть две стартовые точки - от Страница1.1 и Страница 2.1.
Page1.1 -> Стр.2 -> Page3
Page1.2 -> Стр.2 -> Page3
Так нажатия кнопки назад будет иметь следующую навигацию:
Page3 -> Page2
Page2 - > Page1.1
Page2 -> Page1.2
Между страницами, которые необходимо сохранить, имеются дополнительные параметры.
В настоящее время я смотрю на то, чтобы поддерживать что-то в сеансе, чтобы поддерживать текущий стек вызовов, который несколько работает, однако, я получаю сбор ссылок для рефереров. В ту минуту я просто пытаюсь это понять.
Я использую это в SharePoint как страницы приложения, однако каждая страница по существу является страницей ASP.NET для этого примера.
Так я ввел абстрактный класс для каждой страницы:
public abstract class SecureLayoutsPageBase : System.Web.UI.Page
{
private PageController _pageController;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_pageController = (PageController)Session["PageController"];
if (_pageController == null)
{
_pageController = new PageController();
Session["PageController"] = _pageController;
}
if (!Page.IsPostBack && Page.Request.UrlReferrer != null)
{
this.PageController.History.Push(Page.Request.UrlReferrer.ToString());
}
}
protected PageController PageController
{
get
{
return _pageController;
}
}
}
который имеет экземпляр PageController:
[Serializable()]
public class PageController
{
private Stack<string> _history = new Stack<string>();
public void Previous(HttpResponse response)
{
string previous = _history.Pop();
response.Redirect(previous);
}
public Stack<string> History
{
get
{
return _history;
}
}
}
Затем каждая страница будет вызывать PageController.Previous в стороне сервера события обработчик для обратной кнопки:
protected void BackButton_Click(object sender, EventArgs e)
{
this.PageController.Previous(this.Response);
}
Эта проблема с этим что вызов PageController.Previous все еще приводит к тому, что Url добавляется в стек. Я просто задаюсь вопросом, есть ли способ предотвратить добавление URL-адреса, когда он был нажат. Или альтернативные решения ...
Да, это своего рода прямо вперед, но потом вы вернетесь к странице 2, и нажмите кнопку назад на странице 2, как ты знаешь, куда вернуться? Страница1.1 или Страница1.2! – Andez