现在我有两个动作,一个用于 HttpGet ,一个用于 HttpPost ,而 HttpGet 一个主要用于子动作,所以我的代码如下:
[ActionName("Comments")]
[HttpGet]
public void CommentList(string postId) {
// This is for SEO
if (!ControllerContext.IsChildAction) {
return Redirect("/post/" + postId);
}
// Get list
return View("CommentList", list);
}
[ActionName("Comments")]
[HttpPost]
public void PostComment(Comment comment) {
// Save to DB
// Get the parent post
// return View("Post", post);
}
不幸的是,在我的帖子视图中,我将 CommentList 渲染为子操作:
@Html.Action("Comments", new { postId = Model.Id });
问题是,当我使用 POST 请求提交评论时,在将评论保存到数据库后,它会执行发布视图,该视图呈现 "评论" 儿童行动。这时,当呈现"评论" 子操作时,HttpVerb仍然是 POST ,因此路由器会提供 PostComment 操作,再次(在一些验证失败后)呈现发布视图,该视图呈现"评论" 子操作......
它会导致无限递归,导致StackOverflowException
并导致我的网络服务器崩溃。
那么,是否有任何方法可以强制我的@Html.Action("Comments")
执行 CommentList 操作,我是否可以将 HttpVerb 或其他内容传递给路由器?< / p>
由于
答案 0 :(得分:0)
为什么不使用我们发布重定向的PRG获取
[ActionName("Comments")]
[HttpPost]
public void PostComment(Comment comment) {
// Save to DB
// redirect to the Get Method
return RedirectToAction("Comments",new {postId=comment.postId.ToString()});
}