1

我正在用 ASP.NET MVC 编写一个简单的博客平台。我的问题是关于部分视图中包含的表单以及处理来自控制器的响应、验证错误或成功。

我有一个博客文章项目视图,它有一个关联的控制器,该控制器返回给定 URL 的帖子。嵌入在这个视图中的是一个局部视图,其中包含一个用于提交对帖子的评论的表单。部分视图表单提交给处理添加评论的单独控制器。在添加注释操作中,我执行验证并向 ModelState 对象添加错误。

问题是我必须在部分视图操作上返回一个 RedirectResult 以便用户返回到原始帖子项目,这意味着我丢失了 ModelState 对象或我想要返回的任何成功消息。

我见过有人提到使用 TempData 将验证或成功信息传递回原始视图,但对我来说这听起来有点骇人听闻。这真的是解决方案吗?如果是这样,任何人都可以推荐一个很好的用法示例吗?如果不是,这是否表明我选择的架构存在更大问题?

4

3 回答 3

3

我过去使用过 PRG 模式,试一试

使用 PRG 模式进行数据修改

于 2009-12-09T20:15:32.423 回答
1

您可以让添加评论操作调用查看帖子操作...

我猜是这样的:

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});
    }
}

或者相同概念的变体...

HTH,
查尔斯

于 2009-12-09T22:31:10.330 回答
0

您是否考虑过使用 Ajax 库来发布页面的该区域?这样你就不需要重定向了。

于 2009-12-09T20:00:38.640 回答