У меня есть простой ListView, разбитый на страницы DataPager, дающий список продуктов. Когда мы нажимаем на продукт, мы открываем страницу с информацией о продукте. На странице с подробностями мы хотим «вернуться к списку продуктов», но, конечно, мы хотим, чтобы она помнила, на какой странице находился пейджер данных.
Конечно, это было задумано как естественное требование к дизайну - каков простой способ сделать это из коробки?
Если мы используем свойство QueryStringField для DataPager, мы получаем номер страницы в 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)
- Переменная Session / cookie требуется для каждого пейджера
- Возникает вопрос, как сбросить переменные сеанса / cookie
Каков «правильный» способ сделать это?
Спасибо