我有一个简单的 ListView,由 DataPager 分页,提供产品列表。当我们点击产品时,我们会打开产品详细信息页面。在详细信息页面上,我们希望“返回产品列表”,但我们当然希望它记住数据分页器所在的页面。
当然,这被认为是一种自然的设计要求 - 简单的开箱即用的方法是什么?
如果我们使用 DataPager 的 QueryStringField 属性,我们会在 URL 中获取页码,因此我希望可以在反向链接中使用引用 URL,但我发现 Request.UrlReferrer 不可靠(当我使用 F5 来在 Internet Explorer 中调试应用程序,例如,Request.UrlReferrer 始终为 null)。
我发现将页码存储在 session 变量中取得了一些成功:
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)
- 每个寻呼机所需的 session /cookie 变量
- 出现如何重置 session/cookie 变量的问题
执行此操作的“正确”方法是什么?
谢谢
最佳答案
您可以尝试我的解决方案
将数据分页器的 QueryStringField
属性设置为查询字符串字段(例如页面)。
<asp:DataPager ID="DataPager2" runat="server" PagedControlID="ListView1"
QueryStringField="page">
....
注意:我将 DataPager 放置在 ListView 之外。
将 linkButton 放入 ListView 中,该按钮会将您重定向到详细信息页面,并在其单击事件中将当前页码保存在 session 中
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,数据分页器会自动将您带到该页码。
祝你好运!
关于c# - 使用 ListView/DataPager 返回页面时记住分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003695/