2009-11-09 3 views
4

У меня есть проект 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 быть правдой?

+1

$ .post * does * set 'X-Requested-With' и, следовательно,' IsAjaxRequest' –

+0

Это сообщение может решить вашу проблему: http://www.britishdeveloper.co.uk/2010/10/aspnet-mvc- isajaxrequest-jquery.html –

+1

Я видел случаи, когда Request.IsAjaxRequest() случайным образом возвращает false при загрузке нескольких разделов страниц через ajax. Я начал добавлять «partial = 1» к запросам и «bool partial = Request.IsAjaxRequest() || ! string.IsNullOrEmpty (Request ["partial"]); 'в контроллерах, чтобы гарантировать, что я получаю частичные страницы на ajax-вызовах и полных страницах при просмотре. –

ответ

0

Я не уверен, какая разница была бы, но возможный способ определить, есть ли в нем инструмент для профилирования HTTP, такой как Fiddler (www.fiddlertool.com), и искать возможные различия между двумя вызовами.

3

Свойство Request.IsAjaxRequest должно отражать наличие HTTP-заголовка X-Requested-With. Действительно ли этот заголовок отправлен на сервер? Как предлагает Джеймс, попробуйте рассказать об этом с помощью Fiddler или аналогичных альтернатив прокси-сервера.

1

Хорошо ... Прошу прощения. Я не знаю, что изменилось, но теперь IsAjaxRequest возвращает true. Я сравниваю код, который я написал выше, и что сейчас выполняется, и я не вижу разницы. Я неоднократно обманывал это раньше, и теперь я неоднократно становился верным. Конечно, я чего-то не хватает, но я этого не вижу.

+0

Это безумие, но то же самое произошло для меня. Что ж. Я не возражаю. –

Смежные вопросы