JQuery AJAX работает, чтобы вернуть частичное представление mvc 3, но загрузка jQuery не - PullRequest
1 голос
/ 25 июля 2011

Я пытаюсь заполнить div частичным представлением в MVC 3. Мой контроллер выглядит так:

[HttpPost]
public ActionResult GetCustomerList(string searchString)
{
    var custService = new CustomerViewModels();
    var custListVM = custService.GetSearchList(searchString);

    return PartialView("GetCustomersList", custListVM);
}

и мой вызов jQuery выглядит так:

function getCustomerList(searchCriteria) {
    $.ajax({
        url: 'Home/GetCustomerList',
        type: 'POST',
        async: false,
        data: { searchString: searchCriteria },
        success: function (result) {
            $("#customerTabBody").html(result);
        }
    });
};

Работает нормально. Я начал задаваться вопросом, могу ли я использовать метод загрузки jQuery, чтобы сделать то же самое с намного меньшим количеством кода, и написал это:

function getCustomerList(searchCriteria) {
    $("#customerTabBody").load('Home/GetCustomerList', { searchString: searchCriteria });
};

Возвращает ошибку о том, что ресурс не найден. Я пытался использовать @ Url.Action, но он кодирует тот же путь контроллера, который я жестко запрограммировал. В Firebug я вижу, что размещаемый URL-адрес одинаков, а параметр searchString одинаково отформатирован в обоих случаях.

Какая разница - почему не работает загрузка?

Спасибо

Ответы [ 3 ]

2 голосов
/ 25 июля 2011

Документы Jquery для нагрузки говорит ...

The POST method is used if data is provided as an object; otherwise, GET is assumed.

так как вы передаете данные как объект, это должен быть пост-вызов в соответствии с документами. Кроме того, вы получаете требуемые данные от контроллера через $ .ajax, поэтому способ действия контроллера, похоже, в порядке. При отправке запроса ajax с использованием load может возникнуть ошибка. Вы можете проверить это в firebug.

1 голос
/ 25 июля 2011

Можете ли вы попробовать это, чтобы увидеть, работает ли это?

function getCustomerList(searchCriteria) {

         $('#customerTabBody').load('@Url.Action("GetCustomerList", "Home")', { 'searchString': searchCriteria });

};
0 голосов
/ 25 июля 2011

Я вполне уверен, что ваш .load () вызов выполняет запрос GET, а не POST.MVC 3 и большинство других транзакций .NET AJAX (методы, оформленные в виде WebMethod, такие как веб-сервисы и методы страниц) требуют передачи данных POST.В этом случае вам просто нужно придерживаться того, что работает.Как вы можете видеть из рабочего вызова $ .ajax (), метод запроса является POST.Если вы хотите сократить часть кода, используйте .ajaxSetup () в сочетании с .post () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...