MVC 3 - 如何从动作方法返回显示模板?

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)


Rob*_*est 2

这个问题是否给了你你正在寻找的东西?似乎表明您可以从操作中调用 HTML 帮助程序。