Частичный рендеринг просмотра на новой странице при разбиении по страницам с использованием списка страниц

Продолжение рендеринга PartialView на новой странице. Поэтому после устранения вышеуказанной проблемы я добавил пейджинг.

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

public ActionResult CreateAdmin(string sortOrder, int? page)
    {
        int pageSize = 10;
        int pageNumber = 1;
        if (page != null)
            pageNumber = Convert.ToInt32(page);

        var result = SortResult(sortOrder);

        return PartialView("AdminSearchResult", result.ToPagedList(pageNumber, pageSize));
    }

В моем частичном представлении я прохожу

@model PagedList.IPagedList<MyApplication.Models.Administration>

jquery для динамического рендеринга частичного представления

<script type="text/javascript">
$(document).ready(function (e) {
    $("#SearchResultbtn").click(function (e) {
        e.preventDefault();
        $("#searchResult").load('@Url.Action("AdminSearchResult", "Administration")');
    });
});    

My view is just a table as shown below

<table class="searchResult" border="1" width="100%">
    <thead>
        <tr>
            <th>
            </th>
            <th>
                @Html.ActionLink("Last Name", "AdminSearchResult", new { sortOrder = ViewBag.LastNameSortParm, currentFilter = ViewBag.CurrentFilter, @class = "linkClicked" })
            </th>
            <th>
                Middle Name
            </th>
            <th>
                @Html.ActionLink("First Name", "AdminSearchResult", new { sortOrder = ViewBag.FirstNameSortParm, currentFilter = ViewBag.CurrentFilter })
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr class="parent">                    
                <td>
                    @item.LastName
                </td>
                <td>
                    @item.MiddleName
                </td>
                <td>
                    @item.FirstName
                </td>
            </tr>
        }
    </tbody>        
</table>

У меня пейджинг и сортировка работают нормально. Проблема в том, что когда я нажимаю ссылку ActionLink «Имя» или любой другой слушатель для сортировки, весь частичный вид отображается на новой странице.

Я предполагаю, что jquery нужно обновить, но как.


person DotNetBeginner    schedule 09.04.2013    source источник


Ответы (1)


Из поведения, которое вы упомянули, я думаю, вам просто нужно что-то вроде этого:

@Ajax.ActionLink("First Name", "AdminSearchResult", new { sortOrder = ViewBag.FirstNameSortParm, currentFilter = ViewBag.CurrentFilter }, new AjaxOptions { UpdateTargetId = "searchResult" }, null)

В основном делать частичное обновление страницы, а не полное обновление страницы?

Чтобы успешно использовать методы ajax в MVC, вам нужно будет сделать следующее. Добавьте этот ключ в настройки приложений в web.config:

  <appSettings>
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

А также включить ненавязчивый ajax-скрипт:

<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
person Moby's Stunt Double    schedule 09.04.2013
comment
Привет, Моби. Еще раз спасибо за ответ. Не не получилось. Когда я нажимаю «Имя» для сортировки, частичное представление открывается на новой странице. - person DotNetBeginner; 09.04.2013
comment
У вас есть ненавязчивый AJAX или MVC Ajax, поскольку скрипт включает эту страницу? - person Moby's Stunt Double; 09.04.2013
comment
Нет, я не знаю. Мне его включать?? - person DotNetBeginner; 09.04.2013
comment
Да, это нужно для использования помощников AJAX в MVC. Я обновил свой ответ для вас. - person Moby's Stunt Double; 09.04.2013
comment
О, я вижу. Таким образом, добавление вышеупомянутого параметра аналогично размещению элементов управления в Updatepanel для частичных обновлений в asp.net???.. - person DotNetBeginner; 09.04.2013
comment
Отчасти да. По сути, он включает встроенные помощники AJAX (@Ajax.Actionlink, @Ajax.BeginForm и т. д.), которые мы используем для форм, ссылок и кнопок для частичного обновления страницы. Это более ручное, чем UpdatePanels, но и гораздо менее запутанное ИМХО. - person Moby's Stunt Double; 09.04.2013
comment
Ну, у меня уже было ‹add key=UnobtrusiveJavaScriptEnabled value=true /› в настройках моего приложения. Я добавил скрипт ‹script src=/Scripts/jquery.unobtrusive-ajax.min.js type=text/javascript›‹/script› на мой взгляд. Теперь я продолжаю получать ошибку jquery при каждой ошибке выполнения Microsoft JScript обратной передачи: объект не поддерживает это свойство или метод - person DotNetBeginner; 09.04.2013
comment
Какую версию jQuery вы включили, и включаете ли вы сначала jQuery, а затем все остальное? Было бы полезно увидеть ваш тег ‹head›. Кроме того, откройте его в Chrome и используйте инспектор, чтобы найти, где происходит ошибка. - person Moby's Stunt Double; 09.04.2013
comment
Большое спасибо за то, что выручили меня. Я только начал работать с MVC и Jquery, поэтому для меня все в новинку. В любом случае, вернемся к проблеме, когда я проверяю эти jquery в своем заголовке ‹script [email protected](~/Scripts/jquery-1.4.4.min.js) type=text/javascript›‹/script› ‹link href=../../Content/themes/base/jquery-ui.css rel=stylesheet type=text/css /› ‹script src=../../Scripts/jquery-1.9.1.js type= text/javascript›‹/script› ‹script src=../../Scripts/jquery-ui.js type=text/javascript/› ‹script src=../../Scripts/jquery.maskedinput.js type =текст/javascript/› - person DotNetBeginner; 09.04.2013
comment
Ооо, у вас есть две ссылки jquery, одна 1.4.4 и одна 1.9.1. Кроме того, какая версия этого пользовательского интерфейса jQuery? Удалите 1.4.4 и переместите 1.9.1 вверху этих ссылок. Ненавязчивая ссылка находится выше или ниже этого фрагмента? - person Moby's Stunt Double; 09.04.2013
comment
Хорошо удалил 1.4.4 и переместил 1.9.1 вверху. Версия jquery UI — это jQuery UI — v1.10.2, а ненавязчивая ссылка находится под фрагментом. - person DotNetBeginner; 09.04.2013
comment
Хорошо, ты гений. Все, что нужно было, это удалить 1.4.4. jquery сводит меня с ума. Я до сих пор не понимаю, почему две версии выдают ошибку. - person DotNetBeginner; 09.04.2013
comment
Потому что они боролись за расширение одного и того же объекта (jQuery/$) разными способами. Рад, что ты в порядке. Удачи с остальной частью вашего приложения! - person Moby's Stunt Double; 09.04.2013
comment