2

製品のリストを提供するDataPagerによってページングされた単純なListViewがあります。製品をクリックすると、製品の詳細ページが開きます。詳細ページでは、「製品リストに戻る」必要がありますが、もちろん、データページャーがどのページにあったかを記憶しておく必要があります。

確かに、これは自然な設計要件として考えられていました-これを行うための簡単なすぐに使える方法は何ですか?

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;
        }
    }

この方法にはいくつかの欠点があります。

  1. QueryStringFieldが空白の場合にのみ機能します(したがって、IsPostBackを検出できます)
  2. 各ポケットベルに必要なセッション/Cookie変数
  3. セッション/Cookie変数をリセットする方法についての質問が発生します

これを行うための「適切な」方法は何ですか?

ありがとう

4

2 に答える 2

2

私の解決策を試すことができQueryStringFieldます datapager のプロパティをクエリ文字列フィールドのページに設定します。

 <asp:DataPager ID="DataPager2" runat="server" PagedControlID="ListView1" 
    QueryStringField="page">
    ....

注: DataPager を ListView の外に配置しました。

詳細ページにリダイレクトするリストビューにlinkBut​​tonを配置し、そのクリックイベントで現在のページ番号をセッションに保存します

 int integ;
    decimal fract;
    integ = DataPager2.StartRowIndex / DataPager2.PageSize;
    fract = (DataPager2.StartRowIndex / DataPager2.PageSize) - integ;
    if (fract > 0)
        page = integ;
    else if (integ > 0) page = integ - 1;
  Session["page"]=page;

詳細ページでページを取得し、クエリ文字列として ListViewpage に返します。ページ番号 1 が指定されていない場合、datapager は自動的にそのページ番号に移動します。

幸運を !

于 2012-01-25T20:04:04.367 に答える
1

フィルターがない場合は、商品があったページを再計算するだけです。

もう 1 つのオプションは、製品詳細ページの URL でページを (リストの可能なフィルター値と共に) エンコードし、それらを使用して元のリストの URL と本質的に同じになるリストの URL を生成することです。ログインに使用される ReturnUrl アプローチのようなものでも。Sharepoint はそのリストで同様のことを行いますが、URL が乱雑になりすぎる可能性があると感じています (そして、私は、乱雑であると言うときに、「クリーンな URL」でたらめに落ちる人ではありません)。

もう 1 つのオプションは、URL を介して製品 ID をリスト ページに渡すことです。その後、リスト ページは適切なページを計算できます。これにより、URL からノイズが除去されます。

于 2012-01-25T13:50:29.977 に答える