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?

Était-ce utile?

La solution

Je l'ai utilisé le modèle PRG dans le passé lui donner un essai

Utiliser PRG Motif pour la modification des données

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top