我有一个动作方法搜索,在发布表单时调用。根据表单的发布值,可能会有数千个搜索结果。我想逐页显示“搜索视图”,但我怎么知道第一次发布的表单值是什么?这样我就可以通过传递页面参数来调用搜索视图。
答案 0 :(得分:2)
最好的方法是接受系统的无国籍状态。每次渲染视图时,在页面中包含下一个操作请求所需的值。它们可以添加到动作链接上的查询字符串中,作为表单元素添加,并且链接调用POST(后者听起来最好,因为搜索项可能是表单输入元素本身)。
每次渲染视图时,只需使用提供的搜索值预先填充搜索词文本输入(我假设您正在使用的内容)。页码可以附加到分页链接上的查询字符串。等
这样,每个后续请求都可以完全实现,并且与之前的任何请求无关。搜索词,页码,页面大小等都应该每次都传递给动作。
答案 1 :(得分:0)
在我的应用程序中,为网格提供数据的所有操作方法都将此类的实例作为参数:
public class QuerySettings
{
private int page;
public QuerySettings()
: this(true)
{
}
public QuerySettings(bool pagingEnabled)
{
this.Page = 1;
this.Rows = 10;
this.PagingEnabled = pagingEnabled;
}
public int Rows { get; set; }
public string SortColumn { get; set; }
public string SortOrder { get; set; }
public string Search { get; set; }
public bool PagingEnabled { get; set; }
public int Page
{
get { return page; }
set { page = Math.Max(1, value); }
}
}
此对象通过业务层传递给服务方法,该方法可以使用传递的信息来应用适当的排序/过滤。然后他们返回包含在的数据:
public class QueryResult<T>
{
public QueryResult()
{
}
public QueryResult(QuerySettings settings, IList<T> items, int currentPage, int totalPages, int totalItems)
{
Settings = settings;
Items = items;
CurrentPage = currentPage;
TotalPages = totalPages;
TotalItems = totalItems;
}
public QuerySettings Settings { get; private set; }
public int CurrentPage { get; private set; }
public int TotalPages { get; private set; }
public int TotalItems { get; private set; }
public IList<T> Items { get; private set; }
public IEnumerable<T> AsEnumerable()
{
return this.Items;
}
}