重定向错误

时间:2013-07-27 07:59:57

标签: c# asp.net-mvc

使用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);
}

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该/可以使用RenderPartial代替RenderAction

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

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