在ASP.NET MVC中使用Post Action进行问题分页

时间:2010-04-23 02:28:24

标签: asp.net asp.net-mvc paging

我有一个页面,它在表单上包含许多参数并将它们发布到操作中。它返回了许多需要分页的搜索结果。我的寻呼机使用ActionLink;

<%= Html.ActionLink(i.ToString(), "Basic", new { page = (i - 1) })%>

结果如预期的那样回归,但当我点击第二页时,它会转到默认的Action,而不是标记为post的那个。表单值不会再次提交,第二页显示的结果是默认结果,而不是带参数的过滤器。

我不确定如何解决这个问题?一种方法是将表单值保存到帖子的数据库中,然后在默认操作中将其读回来,但这似乎有点过分。

谢谢!

2 个答案:

答案 0 :(得分:2)

MVCContrib Grid和Pager处理此特定方案。你可以编写自己的,但我会推荐Grid和Pager UI助手。

http://mvccontrib.codeplex.com/

http://mvccontrib.codeplex.com/sourcecontrol/network/Show?projectName=MVCContrib&changeSetId=4112aa6f6d84#src%2fMVCContrib%2fUI%2fPager%2fPager.cs

private string CreateQueryString(NameValueCollection values)
        {
            var builder = new StringBuilder();

            foreach(string key in values.Keys)
            {
                if(key == _pageQueryName)
                    //Don't re-add any existing 'page' variable to the querystring - this will be handled in CreatePageLink.
                {
                    continue;
                }

                foreach(var value in values.GetValues(key))
                {
                    builder.AppendFormat("&amp;{0}={1}", key, HttpUtility.HtmlEncode(value));
                }
            }

            return builder.ToString();
        }

答案 1 :(得分:1)

我遇到了同样的情况。 当用户点击“上一个”或“下一个”链接时,我选择使用ajax表单发帖。

遵循javascript功能。

function searchResultsPage(pageNum) 

{

$("#searchResultPageNum").val(pageNum);

var frm = $("form#ajaxSearch");
$.post(frm.attr('action'),
        frm.serialize(),
        function(rData) {
            $("#rvwLstFrmContainer").html(rData);
        });

}

其中'searchResultPageNum'是隐藏字段,用于反映要加载的新页码。

'ajaxSearch'是ajax表单id,使用Html helper为AjaxForm呈现。

'rvwLstFrmContainer'是包含结果的div。

社区!抱歉,关于格式错误的代码。无法正确发布