ASP.NET MVC和Paging - Search&结果场景

时间:2008-12-15 16:39:02

标签: asp.net-mvc paging

我的页面中有一个表单,一个get和一个帖子,我想在我的获取表单上添加寻呼机..所以我无法翻阅结果..

我遇到的问题是当我移动到第二页时它没有显示任何内容..

我正在使用这个库进行分页.. http://stephenwalther.com/Blog/archive/2008/09/18/asp-net-mvc-tip-44-create-a-pager-html-helper.aspx

这是我的行为代码。

    [AcceptVerbs("GET")]
    public ActionResult SearchByAttraction()
    {
        return View();
    }  

    [AcceptVerbs("POST")]
    public ActionResult SearchByAttraction(int? id, FormCollection form)
    {....
    }

这就是我在获取表单上使用

的方式

<%= Html.Pager(ViewData.Model)%> //但是当我这样做时,它会去 这种方法  的[AcceptVerbs( “GET”)]         public ActionResult SearchByAttraction()

而不是这个

[AcceptVerbs(“POST”)] public ActionResult SearchByAttraction(int?id,FormCollection form)

哪种情况发生..但我真的想不出任何其他方式这样做

任何帮助都将非常感激..

感谢名单

4 个答案:

答案 0 :(得分:9)

我建议不要通过HTTP POST进行分页。页面和搜索条件是查询字符串的两个完美示例。将这些值放在查询字符串&加载你的行动args。

想一想。您可以在谷歌搜索“馅饼”,导航到第14页,复制链接并将其发送给您的祖母。当您的传呼/搜索仅适用于表单帖子时,您无法执行此操作。

答案 1 :(得分:1)

当然它会触及SearchByAttraction的GET版本,因为使用这个控件你有一个链接作为输出。

所以你需要做的是:

1. make form on the page:
    <form id="myForm" action="your/url" method="post">
        <input type="hidden" name="page" />

        <input type="hidden" name="your_param1" />
        <input type="hidden" name="your_param2" />
        <input type="hidden" name="your_paramN" />
    </form>

2. make changes to pager - it should produce something like that:

    <ul id="pager">
        <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(1);">1</a></li>
        <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(2);">2</a></li>
        <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(3);">3</a></li>
    </ul>

3. add simple javascript function on the page:

    <script language="javascript" type="text/javascript">
        function submitMyForm(page) {
            var form = document.forms["myForm"];
            form.elements["page"].value = page;
            form.submit();
            return false;
        }
    </script>

您将能够点击POST版本,因为点击该链接将使用POST请求在服务器上提交您的表单。

答案 2 :(得分:1)

试试这个:

[AcceptVerbs("GET")]
public ActionResult SearchByAttraction(int? id)
{
    return View();
}  

id应包含您需要显示的页码。

如果您使用此方法丢失表单值,则需要更改Html.Pager方法以将每个操作链接呈现为表单提交链接。

答案 3 :(得分:1)

Thanx每个人我终于让它工作..只是使用了一种形式..并做了类似的事情

控制器操作

    [AcceptVerbs("GET")]
    public ActionResult SearchByAttraction()
    {
        return View();
    }

    public ActionResult Search(FormCollection form,int? id)
    {
        var info = _repository.ListByLocation(city, postal, pageIndex, 2);
        return View("SearchByAttraction", info); 
    }

查看

<% using (Html.BeginForm("Search", "Home", FormMethod.Get))
{ %>

所以每次发帖都会调用搜索方法..