我是 asp 新手,编写了一个项目,该项目将连接到数据库,检索数字记录,然后在分页表中将这些记录呈现给用户。然后用户可以单击记录进行编辑、进行编辑、保存更改并返回到原始表格视图。更新页面是强类型的。
我正在努力跟踪上次查看的分页页面,然后导航回它。即,如果用户在第 5 页(共 10 页),则他们从第 5 页更新记录,当保存编辑时,表格再次显示,但已返回到第 1 页。跟踪记录的最佳方法是什么最后一页?
任何帮助表示赞赏。
克里斯
我是 asp 新手,编写了一个项目,该项目将连接到数据库,检索数字记录,然后在分页表中将这些记录呈现给用户。然后用户可以单击记录进行编辑、进行编辑、保存更改并返回到原始表格视图。更新页面是强类型的。
我正在努力跟踪上次查看的分页页面,然后导航回它。即,如果用户在第 5 页(共 10 页),则他们从第 5 页更新记录,当保存编辑时,表格再次显示,但已返回到第 1 页。跟踪记录的最佳方法是什么最后一页?
任何帮助表示赞赏。
克里斯
通常我会在表单提交中传递页码,然后在保存后重定向时,将其作为查询字符串的一部分传递,以便您的操作可以将正确的数据页面提供回视图。
这还允许用户为特定页面添加书签,这可能很有用,或者甚至在必要时刷新当前页面,而不会失去他们的位置。
如果该功能可用,您可能还需要传递排序信息。
我发现将它保存在视图状态中很好:例如:
ViewState("分页") = 1
最后,我在服务器上使用了会话 cookie 来跟踪显示的页面和最后一次搜索。这意味着我可以在页面/控制器之间导航并跟踪每个页面中显示的页面,并且不需要传递大量参数。我添加了一个新类:
public class SearchModel
{
public string TargetController { get; set; }
public string TargetMethod { get; set; }
public string OriginalSearchCriteria { get; set; }
public string NewSearchCriteria { get; set; }
public int Page { get; set; }
public void SetCriteria(String newCriteria, int pageIn)
{
if (!newCriteria.Equals(OriginalSearchCriteria))
{
OriginalSearchCriteria = newCriteria;
Page = 1;
}
else
{
Page = pageIn;
}
}
public void SetPage(int newPage)
{
if (newPage != 0)
Page = newPage;
}
}
在我刚刚添加的控制器中:
private SearchModel GetSearch()
{
SearchModel search = (SearchModel)Session["CgRefCodeSearch"];
if (search == null)
{
search = new SearchModel();
search.Page = 1;
search.OriginalSearchCriteria = "";
Session["CgRefCodeSearch"] = search;
}
return search;
}
然后,在控制器中的每个功能上,我可以参考:
GetSearch().SetPage(page);
CurrentPage = GetSearch().Page etc...
这是基于我在 Adam Freeman 的 Pro ASP.NET MVC 3 Framework 第三版中阅读的内容;史蒂文·桑德森。它真的很简单,但工作正常。