これで、 HttpGet用とHttpPost用の 2 つのアクションがあり、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);
}
残念ながら、私のPostビューでは、 CommentListを子アクションとしてレンダリングします。
@Html.Action("Comments", new { postId = Model.Id });
問題は、POSTリクエストでコメントを送信すると、コメントが DB に保存された後、「コメント」子アクションをレンダリングするPostビューを実行することです。ここで、「コメント」子アクションがレンダリングされるとき、HttpVerb はまだPOSTであるため、ルーターはPostCommentアクションを提供します。これは、(いくつかの検証失敗の後) 「コメント」子アクションをレンダリングするPostビューをレンダリングします...
無限再帰が発生しStackOverflowException
、Web サーバーがクラッシュします。
したがって、CommentListアクションを強制的に@Html.Action("Comments")
実行する方法はありますか? HttpVerbなどをルーターに渡すことはできますか?
ありがとう