У меня есть проект MVC, в котором у меня есть форма с кнопкой отправки. Я добавил обработчик на стороне клиента jquery, который перехватывает событие отправки формы. Функция javascript вызывает одно и то же действие MVC, которое было бы вызвано без javascript.Request.IsAjaxRequest возвращает false
$("form[action ='/List/CreateItem']").submit(
function() {
$.post($(this).attr("action"), $(this).serialize(), function(response) { $("#results").html(response); });
return false;
}
);
В действии MVC, что называется, я проверить Request.IsAjaxRequest, чтобы решить, следует ли возвращать представление или результат JSON. Моя проблема в том, что Request.IsAjaxRequest возвращает false, хотя я знаю, что вызов выполняется из функции jquery. (Я знаю это, потому что, если я прокомментирую строку $ .post в функции jquery и просто оставьте возвращаемую ложную строку, ничего не произойдет. Если я не буду комментировать строку, действие будет выполнено, но оно вернет представление, потому что IsAjaxRequest false.)
Должна ли эта строка заставлять Request.IsAjaxRequest быть правдой?
$ .post * does * set 'X-Requested-With' и, следовательно,' IsAjaxRequest' –
Это сообщение может решить вашу проблему: http://www.britishdeveloper.co.uk/2010/10/aspnet-mvc- isajaxrequest-jquery.html –
Я видел случаи, когда Request.IsAjaxRequest() случайным образом возвращает false при загрузке нескольких разделов страниц через ajax. Я начал добавлять «partial = 1» к запросам и «bool partial = Request.IsAjaxRequest() || ! string.IsNullOrEmpty (Request ["partial"]); 'в контроллерах, чтобы гарантировать, что я получаю частичные страницы на ajax-вызовах и полных страницах при просмотре. –