1

ページに get と post のフォームがあり、get フォームにページャーを追加したいので、結果をページングできません..

私が抱えている問題は、2番目のページに移動しても何も表示されないことです..

ページングにこのライブラリを使用しています.. 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 フォーム)

これは理にかなっています..しかし、これを行う他の方法は本当に考えられません

どんな助けでも大歓迎です..

ありがとう

4

4 に答える 4

9

HTTPPOSTを介してページングを実行しないことをお勧めします。ページと検索条件は、クエリ文字列の目的の2つの完璧な例です。それらの値をクエリ文字列に入れて、アクション引数をロードします。

これについて考えます。グーグルで「パイ」を検索し、14ページに移動して、リンクをコピーしておばあちゃんに送信できます。ページング/検索がフォームの投稿でのみ機能する場合は、これを行うことはできません。

于 2008-12-15T19:34:41.987 に答える
1

これを試して:

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

id には、表示する必要があるページ番号が含まれている必要があります。

このアプローチを使用してフォームの値を失った場合は、Html.Pager メソッドを変更して、各アクション リンクをフォーム送信リンクとしてレンダリングする必要があります。

于 2008-12-15T18:09:16.777 に答える
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

みんなありがとう、ついに機能するようになりました.. 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 に答える