/ / Bonnes pratiques pour renvoyer une réponse à partir d'une vue partielle - asp.net-mvc, partial-views

Meilleure pratique pour renvoyer une réponse à partir d'une vue partielle - asp.net-mvc, partial-views

J'écris une plate-forme de blog simple avec ASP.NET MVC. Ma question concerne les formulaires contenus dans des vues partielles et la gestion de la réponse, des erreurs de validation ou du succès, du contrôleur.

J'ai une vue d'élément d'article de blog qui a uncontrôleur associé qui renvoie une publication pour une URL donnée. Cette vue contient une vue partielle contenant un formulaire de soumission de commentaires sur la publication. Le formulaire de vue partielle est soumis à un contrôleur distinct qui gère l'ajout de commentaires. Dans l'action d'ajout de commentaire, j'effectue la validation et ajoute des erreurs à l'objet ModelState.

Le problème est que je dois retourner unRedirectResult sur l'action de vue partielle afin que l'utilisateur soit renvoyé à l'élément de publication d'origine, ce qui signifie que je perds l'objet ModelState ou tout message de réussite que je souhaite renvoyer.

J'ai vu des gens mentionner l'utilisation de TempData pourrenvoyer les informations de validation ou de réussite à la vue d'origine, mais pour moi, cela semble un peu hackish. Est-ce vraiment la solution? Si oui, quelqu'un peut-il recommander un bon exemple de son utilisation? Sinon, est-ce le signe de problèmes plus importants dans l'architecture que j'ai choisie?

Réponses:

3 pour la réponse № 1

J'ai utilisé le modèle PRG dans le passé, essayez-le

Utiliser le modèle PRG pour la modification des données


1 pour la réponse № 2

Vous pouvez demander à l'action d'ajout de commentaire d'appeler l'action Afficher la publication ...

Quelque chose comme ça je suppose:

public class PostController
{
... blah ...

public ActionResult ViewPost(int postId)
{
Post post = PostRepository.GetPost(postId);
return View("ViewPost", post);
}

public ActionResult AddComment(int postId, string comment, string otherInfo)
{
//Validate stuff, setting modelstate etc

//If it isn"t valid, return the same post view (modelstate will stay)
if (!ModelState.IsValid)
return this.ViewPost(postId);

//If it is valid then we want to save it and follow PRG pattern
PostRepository.Save(newValidComment);
TempData["Message"] = "Thanks for your comment!";
return RedirectToAction("ViewPost", new {id = postId});
}
}

Ou une variante du même concept ...

HTH,
Charles


0 pour la réponse № 3

Avez-vous envisagé d'utiliser les bibliothèques Ajax pour simplement publier cette zone de la page? De cette façon, vous n'auriez pas besoin de rediriger.