Consulte la respuesta de Simons a continuación. El método que describo aquí ya no es necesario en la última versión de ASP.NET MVC.
La forma en que el método de extensión IsMvcAjaxRequest
funciona actualmente es que comprueba Request["__MVCASYNCPOST"] == "true"
, y solo funciona cuando el método es una solicitud HTTP POST.
Si realiza solicitudes HTTP POST a través de jQuery, puede insertar dinámicamente el valor __MVCASYNCPOST
en su solicitud y, a continuación, puede aprovechar el método de extensión IsMvcAjaxRequest
.
Aquí está un link to the source of the IsMvcAjaxRequest extension method para su conveniencia.
Alternativamente, se podría crear un clon del método IsMvcAjaxRequest
extensión llamada IsjQueryAjaxRequest
que comprueba Request["__JQUERYASYNCPOST"] == "true"
y se podía insertar dinámicamente ese valor en el HTTP POST.
actualización
decidí seguir adelante y dar a este un tiro aquí es lo que ocurrió.
Método de extensión
public static class HttpRequestBaseExtensions
{
public static bool IsjQueryAjaxRequest(this HttpRequestBase request)
{
if (request == null)
throw new ArgumentNullException("request");
return request["__JQUERYASYNCPOST"] == "true";
}
}
Comprobación de una acción si un método es un jQuery $ .ajax() solicitud:
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(':(');}
}
);
});
para cualquier persona confusa Se ha cambiado el nombre de IsMvcAjaxRequest (a partir de RC1) por el de IsAjaxRequest solo para hacerlo compatible con otras bibliotecas de Ajax. por favor, vea mi publicación a continuación –