ASP.NET の多数の Web フォーム間のナビゲーションを追跡しようとしています。以下を使用して、クライアント側の戻るナビゲーションを試しました。
<asp:Button ID="BackButton" runat="server" Text="Back"
OnClientClick="JavaScript:window.history.back(1);return false;" />
残念ながら、ポストバックが進行しているため、これは私のシナリオでは機能しません。私のシナリオには、多数の Web フォームがあります。
- ページ1.1
- ページ1.2
- ページ2
- 3ページ目
ページを前方に移動する操作は、ウィザードと同様に機能します。Page1.1 と Page1.2 の 2 つの開始点があります。
Page1.1 -> Page2 -> Page3
Page1.2 -> Page2 -> Page3
したがって、戻るボタンをクリックすると、次のナビゲーションが表示されます。
Page3 -> Page2
Page2 -> Page1.1
Page2 -> Page1.2
維持する必要があるページ間で渡される追加のパラメーターがあります。
現在、セッションで何かを維持して現在のコールスタックを維持することを検討していますが、これは多少機能しますが、リファラー URL が蓄積されています。現時点では、これを概念化しようとしています。
これをアプリケーション ページとして 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が追加されないようにする方法があるかどうか疑問に思っています。または代替ソリューション...