2010-12-05 5 views

Répondre

8

Si vous chargez votre Ajax grâce à partials, vous pouvez vérifier si l'en-tête HTTP demande HTTP_X_REQUESTED_WITH est présente et sa valeur est égale à XMLHttpRequest.

Lorsqu'une demande est faite par le navigateur tête n'est pas présent

Voici une application très simple d'une action attribut de filtre qui fait le travail pour vous

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" }; 
     } 
    } 
} 

Vous pouvez l'utiliser pour décorer toute action où vous voulez vérifier si la demande est une demande ajax

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

Pouvez-vous me montrer comment je ferais cela? –

+0

bien ne me dérange pas je l'ai trouvé Request.Headers.Get ("X-Requested-With"); o) –

+0

S'il vous plaît jeter un oeil à ma réponse modifier pour les détails de mise en œuvre :) – Lorenzo

4

Je crois que l'attribut [ChildActionOnly] est ce que vous cherchez pour.

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

Phil Haack a un article utilisant here

+0

Je suis Bien sûr, il fait ce qu'il est censé faire, mais ce travail dosent quand je fais un appel ajax pour obtenir la vue partielle. –

+0

ChildActionOnly n'empêche pas d'utiliser la requête Ajax: "Toute méthode marquée avec ChildActionOnlyAttribute ne peut être appelée qu'avec les méthodes d'extension Action ou RenderAction HTML." . Veuillez lire http://msdn.microsoft.com/en-us/library/system.web.mvc.childactiononlyattribute(v=vs.118).aspx – RolandoCC

Questions connexes