Les meilleures pratiques pour retourner une réponse d'une vue partielle
-
18-09-2019 - |
Question
Je vous écris d'une simple plate-forme de blogging avec ASP.NET MVC. Ma question concerne les formes contenues dans une vue partielle et la manipulation de la réponse, les erreurs de validation ou de succès, du contrôleur.
J'ai un blog post vue de l'élément qui a un contrôleur associé qui retourne un poste pour une URL donnée. Intégré dans ce point de vue est une vue partielle contenant un formulaire pour soumettre des commentaires sur le poteau. La forme vue partielle soumet à une unité de commande séparée qui gère l'ajout de commentaires. A l'intérieur de l'action de commentaires add-je effectuer la validation et ajouter des erreurs à l'objet ModelState.
Le problème est que je dois retourner un RedirectResult sur l'action vue partielle afin que l'utilisateur est retourné à l'élément de poste d'origine, ce qui signifie que je perds l'objet ModelState ou des messages de succès que je veux revenir.
J'ai vu des gens mentionnent l'utilisation de TempData pour réussir la validation ou l'information succès retour à la vue originale, 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 un signe de plus gros problèmes dans mon architecture choisie?
La solution
Je l'ai utilisé le modèle PRG dans le passé lui donner un essai
Autres conseils
Vous pouvez avoir l'action de commentaires add appeler l'action post-vue ...
Quelque chose comme ça guess I:
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 ...
HTHS,
Charles
Avez-vous envisagé d'utiliser les bibliothèques Ajax pour poster simplement cette zone de la page? De cette façon, vous ne devez rediriger.