2010-12-05 14 views

Respuesta

8

Si carga sus parciales a través de Ajax a continuación, se puede comprobar si la cabecera HTTP solicitud HTTP_X_REQUESTED_WITH está presente y su valor es igual a XMLHttpRequest.

Cuando se hace una solicitud a través del navegador de cabecera no está presente

Aquí es una aplicación muy sencilla de un filtro de atributo de acción que hace el trabajo para usted

public class CheckAjaxRequestAttribute : ActionFilterAttribute 
{ 
    private const string AJAX_HEADER = "X-Requested-With"; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
     bool isAjaxRequest = filterContext.HttpContext.Request.Headers[AJAX_HEADER] != null; 
     if (!isAjaxRequest) { 
      filterContext.Result = new ViewResult { ViewName = "Unauthorized" }; 
     } 
    } 
} 

Puede utilizarlo para decorar cualquier acción en la que desea comprobar si la petición es una petición ajax

[HttpGet] 
[CheckAjaxRequest] 
public virtual ActionResult ListCustomers() { 
} 
+0

¿Me puede mostrar cómo me gustaría hacer esto? –

+0

bueno, no importa, lo encontré Request.Headers.Get ("X-Requested-With"); o) –

+0

Por favor, eche un vistazo a mi edición de respuestas para detalles de implementación :) – Lorenzo

4

creo el atributo [ChildActionOnly] es lo que estás buscando para.

[ChildActionOnly] 
public ActionResult Edit(int? id) 
{ 
    var item = _service.GetItem(id ?? 0); 
    return PartialView(new EditModel(item)) 
} 

Phil Haack tiene un artículo usarlo here

+0

Estoy seguro que hace lo que se supone que debe hacer, pero este dosent funciona cuando hago una llamada ajax para obtener la vista parcial. –

+0

ChildActionOnly no impide el uso de la solicitud Ajax: "Cualquier método marcado con ChildActionOnlyAttribute solo se puede llamar con los métodos Action o RenderAction HTML extension". . Lea http://msdn.microsoft.com/en-us/library/system.web.mvc.childactiononlyattribute(v=vs.118).aspx – RolandoCC

Cuestiones relacionadas