给出HttpVerb的子动作

时间:2012-12-26 06:40:11

标签: asp.net-mvc asp.net-mvc-3

现在我有两个动作,一个用于 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>

由于

1 个答案:

答案 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()});
}