重定向错误

本文关键字:错误 重定向 | 更新日期: 2023-09-27 18:25:12

在使用ASP.NET MVC的第一步中,我试图创建一个简单(典型)的带评论页面的文章:在文章本身下面应该有一个表单,允许用户向文章发布评论。

我用以下方法为提交表单和CommentController创建了一个部分视图:

public ActionResult Add(int entryId);
[HttpPost]
public ActionResult Add(Comment comment);

然后,在文章下面以HomeController:的视角

<div class="add-comment">
    @{ Html.RenderAction("Add", "Comment", new { entryId = Model.EntryId }); }
</div>

表单呈现正确,添加过程确实有效(注释保存到数据库中),但在重定向回文章后,抛出InvalidOperationException,在调试器中高亮显示Html.RenderAction(如上所示):

System.InvalidOperationException:不允许子操作执行重定向操作。

为什么会发生这种情况?

以下是CommentController方法的代码:

public ActionResult Add(int entryId)
{
    var comment = new Comment { EntryId = entryId };
    return PartialView(comment);
}
[HttpPost]
public ActionResult Add(Comment comment)
{
    if (ModelState.IsValid)
    {
        comment.Date = DateTime.Now;
        var entry = db.Entries.FirstOrDefault(e => e.EntryId == comment.EntryId);
        if (entry != null)
        {
            entry.Comments.Add(comment);
            db.SaveChanges();
            return RedirectToAction("Show", "Home", new { id = entry.EntryId });
        }
    }
    return PartialView(comment);
}

或者我应该采取不同的方法?

重定向错误

在另一个上添加HttpGet添加操作

您应该/可以使用RenderPartial而不是RenderAction:

Html.RenderPartial("YourPartialView", new Comment { EntryId = Model.EntryId });

如果你所做的只是实例化一个已经有ID的模型,那么似乎没有必要使用你的操作方法。