См. Ответ Саймонса ниже. Описанный здесь метод больше не нужен в последней версии ASP.NET MVC.
В настоящее время работает метод расширения IsMvcAjaxRequest
, который проверяет Request["__MVCASYNCPOST"] == "true"
и работает только тогда, когда метод является запросом HTTP POST.
Если вы делаете запросы HTTP POST через jQuery, вы можете динамически вставить значение __MVCASYNCPOST
в ваш запрос, а затем воспользоваться преимуществом метода расширения IsMvcAjaxRequest
.
Вот ссылка на источник метода расширения IsMvcAjaxRequest для вашего удобства.
Кроме того, вы можете создать клон метода расширения IsMvcAjaxRequest
, который называется
IsjQueryAjaxRequest
, который проверяет Request["__JQUERYASYNCPOST"] == "true"
, и вы можете динамически вставить это значение в HTTP POST.
Обновление
Я решил пойти дальше и дать этому шанс, вот что я придумал.
Метод расширения
public static class HttpRequestBaseExtensions
{
public static bool IsjQueryAjaxRequest(this HttpRequestBase request)
{
if (request == null)
throw new ArgumentNullException("request");
return request["__JQUERYASYNCPOST"] == "true";
}
}
Проверка по действию, является ли метод запросом jQuery $ .ajax ():
if (Request.IsjQueryAjaxRequest())
//some code here
JavaScript
$('form input[type=submit]').click(function(evt) {
//intercept submit button and use AJAX instead
evt.preventDefault();
$.ajax(
{
type: "POST",
url: "<%= Url.Action("Create") %>",
dataType: "json",
data: { "__JQUERYASYNCPOST": "true" },
success: function(data) {alert(':)');},
error: function(res, textStatus, errorThrown) {alert(':(');}
}
);
});