【问题标题】:MVC 3 WebGrid Paging doesn't return orginal search resultsMVC 3 WebGrid 分页不返回原始搜索结果
【发布时间】:2012-01-27 08:14:06
【问题描述】:

我有一个搜索页面,加载时会填充一个 webgrid。我的问题是分页。 在加载时,我用“未发表”的文章填充网格(在这种情况下没有)。 然后我搜索“Currently Published”并得到 3 行。

现在我有 3 页(出于测试目的,我将分页设置为每页一行)。 第一次搜索 - 它在网格中得到正确的答案,假设有 2 页。

如果我单击 2 转到第二页 - 网格填充了负载标准 - 这是未发布的,没有任何内容。我看到我不会在页面点击时返回 HttpPost 操作 - 所以我不确定它为什么会这样做。

您可以看到我有一个名为 Admin 的初始负载 和一个名为 Admin(FormCollection values) 的帖子 在两者上,我都将默认值设置回“未发布”

        public ActionResult Admin()
        {

            var menus =
            (
                 from p in db.Menus.ToList()
                 where p.ParentID == 0
                 orderby p.Order ascending
                 select p.Name
            );
            ViewBag.Menus = new SelectList(menus, "Home");

            string[] publishedStatuses = new string[3] 
                   { "NOT PUBLISHED", "EXPIRED ALREADY", "CURRENTLY PUBLISHED"}; 
            ViewBag.Published = new SelectList(publishedStatuses, "NOT PUBLISHED");

            var articles =
            (
                    from p in db.Articles.ToList()
                    where p.PublishToWeb == false && p.Menu == "Home"                  
                    select p
             );

            }
            return View(articles);
        }              
} 

【问题讨论】:

    标签: c# asp.net-mvc webgrid


    【解决方案1】:

    您的问题是您单击到页面的链接将再次调用管理控制器操作,并且由于您没有收到任何参数,它将再次进行初始搜索。

    如果将动作方法更改为:

    public ActionResult Admin(int? page)
    {
       //Your code here
    }
    

    您将从网络网格中获取页码,并可以在搜索中使用它。要启用过滤和 searchgin,请查看此博客文章:

    http://www.elylucas.net/post/Using-a-grid-that-can-sort-page-and-filter-in-AspNet-MVC3e28093Part-1e28093Using-the-WebGrid-WebHelper.aspx

    【讨论】:

    • 对不起,我无法传递我的完整代码 - 我有一个 [HttpPost] public ActionResult Admin(FormCollection values) { 它将文章返回到由 ViewBag.Published 中的参数过滤的视图}
    • 第二页点击给了我未发布的结果,这是下拉菜单的默认值。它从不通过 Admin post 功能,所以我不知道它如何正确获取该记录,但确实如此。
    • 第二次点击让它调用管理员而不是管理员帖子,这就是它获得原始默认设置的原因。我怎样才能让它在分页点击时调用 Admin Post?
    • 由于分页是通过 GET 完成的(点击链接),你不能让它调用 adminPost 方法。您可以通过将 jQuery 事件处理程序附加到分页链接来做到这一点,例如 $('.ajaxGrid table tfoot tr a').live('click', updateGrid); });
    • 是的,我看到它现在就可以了-您能否详细说明-我不知道如何开始您的建议?谢谢
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多