2010-11-11 4 views
1

J'utilise asp.net mvc2 pour mon application. J'ai une requête ajax envoyée en utilisant jquery.Request.IsAjaxRequest ne fonctionne pas correctement dans asp.net mvc2

$.ajax{(
url:'/home/index' 
type:'post', 
data:$('#myform').serialize(), 
dataType:'html', 
success:function(response) 
{ 
    //update relevent document portion 
} 
}); 

ici est ma méthode de commande

public ActionResult index(Book book) 
{ 
    Repository _repo = new Repository(); 
    _repo.Add(book); 
    _repo.Save(); 
    if(Request.IsAjaxRequest()) 
    { 
     return RedirectToAction("List",new{id=book.id}); 
    } 
    //do something else 
} 

public ActionResult List(int id) 
{ 
    if(Request.IsAjaxRequest())/* here it always returns false even though its been redirected from an ajax request to get here*/ 
    { 
     //do something 
    } 
} 

indice ActionResult Request.IsAjaxRequest() fonctionne correctement, mais lorsque son redirigée à la liste ActionResult ne l'identifie pas comme demande ajax. comment puis-je savoir que cette liste est appelée à partir d'une redirection ajax?
Edit1: Request.IsAjaxRequest renvoie true dans IE pour les méthodes index et List alors que dans firefox Request.IsAjaxRequest est true uniquement pour la méthode d'index. quand j'inspecte le code pour la demande d'ajax je pourrais voir deux d'entre eux; le premier est la méthode post to index et le second est la méthode Get from List. IE envoie l'en-tête x-requested-with avec les deux requêtes alors que firefox n'envoie cet en-tête que pour la première requête destinée à indexer la méthode. Comment puis-je faire fonctionner firefox comme IE (dans ce scénario uniquement) i.e envoyer l'en-tête x-requested-with avec la requête au cas où la deuxième requête ne proviendrait pas du client mais est une redirection de la première requête.
grâce

+0

Il ne work.Because ur plus Rediriger à une autre action dans laquelle il agira redirect.what aussi simple que je veux transmettre que votre message ajax Jquery ne fonctionnera que pour l'action d'index.Vous pouvez le faire en utilisant une variable d'indicateur. Il suffit de définir le statut de l'indicateur avec Request.IsAjaxRequest() sous l'action index et de le vérifier dans la liste. –

+0

@plz c mise à jour à la question –

Répondre

0

ok, je HVE fait quelque chose comme

public ActionResult index(Book book) 
{ 
    Repository _repo = new Repository(); 
    _repo.Add(book); 
    _repo.Save(); 
    if(Request.IsAjaxRequest()) 
    { 
     return List(book.id); 
    } 
    //do something else 
} 

public ActionResult List(int id) 
{ 
    if(Request.IsAjaxRequest())/* in this scenario Request.IsAjaxRequest returns true because there is no redirection and no new request*/ 
    { 
     return View("List"); 
    } 
} 

maintenant je voudrais savoir s'il y a un problème avec cette approche
concernant

1

mahomet,

vous devriez faire quelque chose comme ceci dans votre action index:

public ActionResult index(Book book) 
{ 
    Repository _repo = new Repository(); 
    _repo.Add(book); 
    _repo.Save(); 
    var items = _repo.GetItems(book.id); 
    if(Request.IsAjaxRequest()) 
    { 
     return PartialView("List", items); 
    } 
    //do something else 
} 

devrait fonctionner comme prévu je penserais, aussi longtemps que vous aviez une liste appelée PartialView que avait une classe fortement typé correspondant aux éléments étant transmis.

+0

hey jim pouvez-vous élaborer un petit peu sur "PartialView". Je veux dire comment cela fonctionne essentiellement. Merci –

+0

sûr. Si vous créez une vue partielle avec le modèle fortement typé correspondant aux éléments, la vue partielle ne mettra à jour que la partie de la page ciblée par la fonction success: dans votre appel ajax. Vous pouvez voir un exemple de ceci en action en téléchargeant une petite application que j'ai créée pour une autre question hier. c'est ici: http://www.gatehousemusic.com/downloads/MvcApplication2.zip –

+0

okkk ya.i vous avez.Merci beaucoup jim. Merci pour l'exemple de mon pote ... –

Questions connexes