我正在用ASP.NET MVC编写一个简单的博客平台。我的问题是关于部分视图中包含的表单以及从控制器处理响应,验证错误或成功。
我有一个博客文章项目视图,其中有一个关联的控制器,它返回给定URL的帖子。此视图中嵌入了一个局部视图,其中包含用于在帖子上提交评论的表单。部分视图表单提交给处理添加注释的单独控制器。在添加注释操作中,我执行验证并向ModelState对象添加错误。
问题是我必须在部分视图操作上返回RedirectResult,以便用户返回到原始post项,这意味着我丢失了ModelState对象或我想要返回的任何成功消息。
我看到人们提到使用TempData将验证或成功信息传递回原始视图,但对我来说这听起来有些过时。这真的是解决方案吗?如果是这样,任何人都可以推荐一个很好的例子吗?如果没有,这是否是我选择的架构中更大问题的迹象?
答案 0 :(得分:3)
我过去曾尝试使用PRG模式试一试
答案 1 :(得分: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});
}
}
或同一概念的变体......
HTHS,
查尔斯
答案 2 :(得分:0)
您是否考虑过使用Ajax库发布该页面的区域?这样你就不需要重定向了。