1

我的页面中有一个 get 和一个 post 表单,我想在我的 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

4 回答 4

9

我建议不要通过 HTTP POST 进行分页。页面和搜索条件是查询字符串用途的 2 个完美示例。将这些值放在查询字符串中并加载您的操作参数。

想想这个。您可以在谷歌搜索“馅饼”,导航到第 14 页,复制链接并将其发送给您的祖母。当您的分页/搜索仅适用于表单帖子时,您不能这样做。

于 2008-12-15T19:34:41.987 回答
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 请求在服务器上提交您的表单。

于 2008-12-15T17:10:05.927 回答
1

试试这个:

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

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

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

于 2008-12-15T18:09:16.777 回答
1

谢谢大家,我终于让它工作了..只用了一种形式..做了这样的事情

控制器动作

    [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))
{ %>

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

于 2008-12-15T18:37:11.853 回答