1

迈出 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);
}

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

4

2 回答 2

0

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

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

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

于 2013-07-28T16:09:46.637 回答
0

添加HttpGet另一个添加操作

于 2013-07-27T08:44:07.947 回答