Asp.net mvc表单发布和分页

时间:2010-12-31 14:26:23

标签: asp.net-mvc-2

我有一个动作方法搜索,在发布表单时调用。根据表单的发布值,可能会有数千个搜索结果。我想逐页显示“搜索视图”,但我怎么知道第一次发布的表单值是什么?这样我就可以通过传递页面参数来调用搜索视图。

2 个答案:

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