DataPagerでページングされた単純なListViewには、製品のリストがあります。製品をクリックすると、製品の詳細ページが開きます。詳細ページでは、「製品リストに戻る」ことを望んでいますが、データページャがどのページにあったのかを覚えておきたいと思います。ListView/DataPagerを使用してページに戻るときのページングを記憶する
確かにこれは自然な設計要件として考えられました。これを行うための簡単な方法は何ですか?
DataPagerのQueryStringFieldプロパティを使用すると、URLのページ番号が取得されるので、私は後者のリンクでリファラーURLを使用できますが、Request.UrlReferrerが信頼できないことがわかりました(F5たとえばInternet Explorerでアプリケーションをデバッグするには、Request.UrlReferrerは常にnullです)。
私はセッション変数にページ番号を記憶して、いくつかの成功を発見した:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Session["PagerIndex"] != null)
{
DataPager1.SetPageProperties((int)Session["PagerIndex"],
DataPager1.MaximumRows, false);
}
}
}
protected void DataPager1_PreRender(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Session["PagerIndex"] = DataPager1.StartRowIndex;
}
}
この方法は、いくつかの欠点がありますQueryStringFieldが空白の場合
- のみ動作します(そうIsPostBackプロパティを検出することができます)
- 各ページャーでセッション/ Cookie変数が必要です
- セッション/ Cookie変数をリセットする方法の問題
これを行うには「適切な」方法は何ですか?
おかげ
URLを介して必要なデータを詳細ページに渡して戻しますが、すべてのシナリオでカスタムコードを作成する必要があるようです。私は毎分細部を手渡している環境から移動しています。これらのすべての不機嫌な作業が私のために行われることを楽しみにしていました!あなたの最初の提案は、リスト内のデータが変更されて再注文などにつながり、保存されたページインデックスが無効になる可能性があるため、より適切であると思います。 – Etherman
このロジックをBasePageクラスなどに追加して、ケースバイケースで処理する必要はありません。私は私の答えにもう一つの選択肢を追加しました。 – Stilgar
実際にあなたの最後の選択肢は、私があなたの最初のものを理解した方法です。これはどのように私はそれを実装することを決めた - 製品IDだけ詳細ページから渡す必要があります。そこから、たとえ製品リストが変更されたとしても、表示するページは正確に分かります。 – Etherman