【问题标题】:Best practice for returning a response from a partial view从部分视图返回响应的最佳实践
【发布时间】:2009-12-09 19:36:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net-mvc partial-views


    【解决方案1】:

    我以前用过 PRG 模式试试看

    Use PRG Pattern for Data Modification

    【讨论】:

      【解决方案2】:

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

      我猜是这样的:

      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,
      查尔斯

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这对于禁用 JavaScript 的浏览器意味着什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多