ASP.NET MVC и пейджинг - сценарий поиска и результатов - PullRequest
1 голос
/ 15 декабря 2008

У меня есть формы на моей странице 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)

какой смысл ... но я не могу придумать какой-либо другой способ сделать это

Любая помощь будет принята с благодарностью ..

Thanx

Ответы [ 4 ]

9 голосов
/ 15 декабря 2008

Я бы рекомендовал не делать пейджинг через HTTP POST. Страница и критерии поиска являются 2 прекрасными примерами того, для чего предназначены строки запросов. Поместите эти значения в строку запроса и загрузите ваши аргументы действий.

Подумай об этом. Вы можете найти в Google «пироги», перейти на страницу 14, скопировать ссылку и отправить ее своей бабушке. Вы не можете сделать это, когда ваш пейджинг / поиск работает только с сообщениями формы.

1 голос
/ 15 декабря 2008

Попробуйте это:

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

идентификатор должен содержать номер страницы, которую нужно отобразить.

Если при использовании этого подхода вы потеряете значения формы, вам потребуется изменить метод Html.Pager, чтобы каждая ссылка действия отображалась как ссылка отправки формы.

1 голос
/ 15 декабря 2008

Спасибо всем, что я наконец заработал ... просто использовал одну форму ... и сделал что-то вроде этого

Действия контроллера

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

так что он вызывает метод поиска каждый раз, когда делает сообщение ..

1 голос
/ 15 декабря 2008

Конечно, он попадет в GET-версию SearchByAttraction, потому что, используя этот элемент управления, вы получаете ссылки в качестве вывода.

Итак, что вам нужно сделать:

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.

...