Che*_*hev 9 c# asp.net-mvc jquery razor asp.net-mvc-3
我有一个显示评论列表的视图.它通过DisplayTemplate完成此操作.我所要做的就是这样@Html.DisplayFor(x => x.BlogPost.PostComments)
,所有的评论都适当地呈现.
页面底部有一个表单,用于添加新评论.此页面使用渐进增强功能.因此,如果禁用了javascript,则表单会像正常一样提交,将注释添加到数据库,然后重定向到呈现博客帖子的操作.但是,如果javascript可用,那么jQuery会劫持表单的提交并通过ajax发布帖子.好吧因为注释标记在显示模板中,我不知道如何从action方法返回它,以便jQuery可以将它放在页面上.
我知道如何使用部分视图执行此操作.我只是让action方法返回正确的局部视图,jquery会将响应附加到页面上的comment容器中.
在我删除我的显示模板以支持部分视图之前,是否有一种直接的方法,我缺少从控制器发回显示模板?
这是我的行动方法:
public ActionResult AddComment(PostComment postComment)
{
postComment.PostedDate = DateTime.Now;
postCommentRepo.AddPostComment(postComment);
postCommentRepo.SaveChanges();
if (Request.IsAjaxRequest())
return ???????
else
return RedirectToAction("BlogPost", new { Id = postComment.BlogPostID });
}
Run Code Online (Sandbox Code Playgroud)
当页面加载时,它不需要担心它,因为它以标准方式使用模板:
<div class="comments">
@Html.DisplayFor(x => x.BlogPost.BlogPostComments)
</div>
Run Code Online (Sandbox Code Playgroud)
我只想知道如何将一个利用显示模板的评论发送回jQuery.
Dar*_*rov 11
您可以尝试返回表示新发布的评论的部分HTML:
if (Request.IsAjaxRequest())
{
return PartialView(
"~/Views/Shared/DisplayTemplates/Comment.cshtml",
postComment
);
}
Run Code Online (Sandbox Code Playgroud)
并在客户端将此注释附加到注释容器:
$.post('@Url.Action("AddComment")', { ... }, function (result) {
$('#comments').append(result);
// or $('#comments').prepend(result); if you want it to appear on top
});
Run Code Online (Sandbox Code Playgroud)