Передать контрольные значения в качестве параметров html.Pagedlist - PullRequest
0 голосов
/ 06 июня 2018

Я использую постраничный список для отображения списка значений.Дисплей работает отлично.Я использую предоставленный ненавязчивый AJAX для получения данных для других страниц.

Вот так выглядит мой постраничный элемент управления.

@Html.PagedListPager(Model.CountryList, page => Url.Action("GetCountries", "Dashboard", new {page}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(PagedListRenderOptions.ClassicPlusFirstAndLast, new AjaxOptions()
{
    HttpMethod = "POST",
    UpdateTargetId = "panel1",
    OnSuccess = "onAjaxSuccess",
    OnFailure = "onAjaxFailure"
})) 

Это отлично работает.

Теперь яУ меня есть текстовое поле и раскрывающийся список на странице, и я хочу передать значения, присутствующие в них, вместе со списком HTML-страниц.

@Html.TextBox("SearchCountryName", new { name = "SearchCountryName", @class = "form-control", placeholder = "Search Country" })

@Html.DropdownList("Continent", ContinentList)

Мой код контроллера:

public PartialViewResult GetDashboardBody(string country,string continent,int? page)
{

}

Я хочу сделать что-то вроде

@Html.PagedListPager(Model.CountryList, page => Url.Action("GetCountries", "Dashboard", new {country = $("#SearchCountryName").val(),continent = $("#Continent").val(),page}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(PagedListRenderOptions.ClassicPlusFirstAndLast, new AjaxOptions()
{
    HttpMethod = "POST",
    UpdateTargetId = "panel1",
    OnSuccess = "onAjaxSuccess",
    OnFailure = "onAjaxFailure"
})) 

Но это не работает.

Итак, как мне передать текущее значение элементов управления в метод действия в качестве параметров, используя html.PagedList

1 Ответ

0 голосов
/ 06 июня 2018

Вам нужно будет обработать это на клиенте, поскольку Razor не знает, что выбрал пользователь.Помните: после отображения страницы Razor перестает быть частью процесса.

Вот что я использовал в недавнем проекте:

<div class="text-center" id="pagingControl">
    <input type="hidden" id="selectedOption" name="selectedOption" />
    @Html.PagedListPager(Model.Logs, page => Url.Action("Index", "Log",
        new { page = page }),
        PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>

При следующей загрузке документа

$('#pagingControl').find('a[href]').on('click', function (e) {
        e.preventDefault();
        $("#selectedOption").val("something"); // When you submit, you can read this field on the controller and pass it on
        var page = utilities.getQueryStringValue(this, 0).replace('page=','');
        $('#AdvancedSearchForm').submit();
    }
});

Функция полезности (не моя, хотя может 'не помню, где я его нашел), как таковой,

getQueryStringValue: function (anchor, index) {
    var queryString = $(anchor).attr('href').split('?')[1];
    var values = queryString.split('&');
    return values[index];
}

Так что хитрость заключается в том, чтобы перехватить щелчок пользователя на элементе управления пейджингом, использовать скрытые поля для отправки любых значений, которые вы хотите, а затем прочитать значения наконтроллер.В этом случае у меня есть скрытое поле с именем selectedOption;добавляйте других по мере необходимости и заполняйте их в JavaScript значениями, предоставленными пользователем.Затем выполните отправку в форму.

Обратите внимание, что здесь используется метод POST.Вы также захотите ввести FormCollection в свое действие, чтобы вы могли прочитать скрытые поля, опубликованные.

...