Проблема с подкачкой страниц после действия в ASP.NET MVC - PullRequest
3 голосов
/ 23 апреля 2010

У меня есть страница, которая принимает ряд параметров в форме и публикует их в действии. Он возвращает ряд результатов поиска, которые необходимо пролистать. Мой пейджер использует ActionLink;

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

Результат возвращается, как и ожидалось, но когда я нажимаю на второй странице, он переходит к действию по умолчанию, а не к тому, которое помечено как сообщение Значения формы больше не отправляются, и результаты, показанные для второй страницы, являются результатами по умолчанию, а не фильтрами с параметрами.

Я не уверен, как решить эту проблему? Один из способов состоял в том, чтобы сохранить значения формы в базе данных поста и прочитать их обратно в действии по умолчанию, но это кажется излишним.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

MVCContrib Grid and 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 голос
/ 24 апреля 2010

Я сталкивался с тем же сценарием.И я предпочитаю делать пейджинг с сообщениями формы 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, отображаемый с помощью Html helper для AjaxForm.

'rvwLstFrmContainer' - это div, содержащий результаты.

Сообщество!Извините, о неформатном коде.Не удалось опубликовать это правильно

...