ASP.NET MVC - Как отобразить результаты поиска ajax?

Я изо всех сил пытаюсь справиться с определенной настройкой формы в моем приложении asp.net MVC. В настоящее время у меня есть страница, которая отображает кусок данных. На этой странице есть простая форма, которая вызывает метод действия, который возвращает частичное представление при публикации (через ajax - jform). Это все очень хорошо, пока я не попытаюсь добавить поддержку подкачки в результаты поиска.

У меня есть кусок кода, который разбивает на страницы IQueryable, но я не уверен, как реализовать это в моей текущей установке.

Вот какой-то код:

[Authorize]
        public ActionResult AssetSearch(string RoomID, string type, string keyword, string risks)
        {

            //check values passed in
            Guid? r = null;
            if (RoomID != "Any" && RoomID != null)
                r = new Guid(RoomID);

            string t = type == "Any" ? null : type;
            string risk = risks == "Any" ? null : risks;

            var assets = surveyRepository.GetAssetsSearch(r, t, keyword, risk);

            if (Request.IsAjaxRequest())
            {
                return PartialView("AssetListControl", assets);
            }
            else
            {
                return View("AssetListControl", assets);
            }
        }

Этот метод действия возвращает частичное представление, которое выводится в div с помощью следующего jquery.

$(document).ready(function() {
        $("#searchForm").submit(function() {
            $("#searchForm").ajaxSubmit({ target: '#results', beforeSubmit: PreSub, success: Success });
            return false;
        });
    });

    function Success(responseText, statusText) {
        $("#loadingMessage").html("done");
        $('#resultsTable').tablesorter();
        $("#results").slideDown("slow");
    }

    function PreSub(formData, jqForm, options) {
        $("#loadingMessage").html("loading...").fadeIn();
        $("#results").slideUp("fast");
        return true;
    }

И моя форма выглядит следующим образом:

<form id="searchForm" action="<%=Url.Action("AssetSearch") %>" method="post">
    <fieldset>
        <label for="RoomID">
            Room Name</label>
        <%= Html.DropDownList("RoomID") %>
        <label for="Type">
            Asset Type</label>
        <%= Html.DropDownList("Type") %>
        <label for="Risks">
            Risk Level</label>
        <%= Html.DropDownList("Risks") %>
        <label for="Keyword">
            Keyword</label>
        <%= Html.TextBox("Keyword") %>
    <input type="submit" name="sumbit" id="searchBtn" value="Search" />
        </fieldset>
    </form>

Извините за перегрузку кода:-)

У меня такое ощущение, что я настроил свой контроллер и смотрю так, что пейджинг будет нелегко реализовать. Все советы приветствуются!

Заранее спасибо!

1 ответ

Итак, мне удалось заставить его работать с AJAX и POST не очень привлекательным способом.

Во-первых, я удалил пару якорных тегов в частичном представлении результатов, которые отображаются, если есть предыдущие или следующие страницы. Эти ссылки запускают функцию javascript и передают значение страницы. Навигация выглядит следующим образом:

<% if (Model.HasPreviousPage)
   { %>
        <a href="#" onclick="PageResults( <%=Model.PageIndex - 1 %>)">Back</a>
<%} %>
<% if (Model.HasNextPage)
   { %>
   <a href="#" onclick="PageResults( <%=Model.PageIndex + 1 %>)">Forward</a>
<%} %>

Функция выглядит следующим образом:

function PageResults(page) {
        var form = document.forms["searchForm"];
        form.elements["page"].value = page;
        $("#searchForm").ajaxSubmit({ target: '#results', beforeSubmit: PreSub, success: Success });
        return false;
    }

Я также настроил свой контроллер для принятия параметра страницы, который используется для получения правильного набора результатов:

var paginated = new PaginatedList<Asset>(assets, Page ?? 0, 10);

Это, кажется, делает свое дело, хотя это не здорово:)

Другие вопросы по тегам