使用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);
}
或者我应该采取不同的做法?
答案 0 :(得分:0)
在另一个添加操作上添加HttpGet
答案 1 :(得分:0)
您应该/可以使用RenderPartial
代替RenderAction
:
Html.RenderPartial("YourPartialView", new Comment { EntryId = Model.EntryId });
如果你所做的只是实例化你已经拥有ID的模型,似乎没有必要使用你的动作方法。