ASP.NET MVC rendu vue partielle avec jQuery ajax
J'ai un contrôleur de l'action qui rend une vue partielle:
public ActionResult Details(int id)
{
DetailsViewModel model =
ModelBuilder.GetDetailsViewModel(id, _repository);
return PartialView("Details", model);
}
et je suis le chargement du contenu retourné dans un élément dynamique comme suit:
$container = appendContainer(); //adds a div to the dom with the correct id
$container.load("MyController/Details", function(response, status, xhr) {
if (status != "success") {
$(container).html('an error has occured');
}
});
donc cela crée un div, et charge ensuite le contenu renvoyé en div.
Je veux modifier un peu pour que le div conteneur n'est créé que si l'appel
le contrôleur est couronnée de succès.
Donc:
- jQuery appelle le contrôleur d'action
- contrôleur retourne PartialView, ou null si l'Id n'est pas trouvé
- Si PartialView est retourné, le conteneur est créé et chargé avec le contenu retourné.
- Si le contrôleur ne trouve pas l'Id, le contenu est créé et une alerte est affichée.
Je vous en serais reconnaissant toute pointeurs sur comment je pourrais mieux réaliser cela.
Vous devez vous connecter pour publier un commentaire.
Tous
load
n'est de retour HTML à partir d'un serveur, alors pourquoi ne pas simplement ajouter à temporaire de la div et puis obtenir le code HTML de succès?Mise à JOUR:
Si vous vous attendez à une exception alors vous devez manipuler. Si vous êtes essentiellement en permettant l'erreur se produit juste pour avoir
status != "success"
alors que c'est une grave odeur de code. Vous devez attraper l'erreur et revenir un autre PartialView.Alors vous êtes assurés de toujours obtenir un code HTML valide la réponse et si vous ne le faites pas, alors votre erreur de base
an error occured
entreront en jeu.dans votre cas, je voudrais utiliser $.ajax au lieu de .load()
vous donne plus de contrôle sur le flux + se sent plus propre
concernant l'état de l'erreur - je déteste aussi en s'appuyant sur les exceptions moche et inefficace,
vous avez plusieurs façons de le gérer:
dans mon code j'utilise $(document).ajaxSend(..) à l'échelle mondiale cocher toutes les réponses Ajax pour 278 code et afficher les messages d'erreur si il y en a une, ou appeler l'origine accroché succès fonction.
Pour retourner l'erreur de l'action-je utiliser le résultat suivant
où ErrorResult peut être un anonyme, un objet ou un objet qui implémente une interface avec une propriété de ErrorMessage afin que vous sachiez ce qu'il faut rechercher lors de la JS