gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:43:52 25 4
gpt4 key购买 nike

我有一个显示评论列表的 View 。它通过 DisplayTemplate 执行此操作。我所要做的就是像 @Html.DisplayFor(x => x.BlogPost.PostComments) 这样所有的评论都会正确呈现。

页面底部有一个表单可以添加新评论。此页面使用渐进式增强。因此,如果 javascript 被禁用,那么表单会像正常一样提交,将评论添加到数据库,然后重定向到呈现博客文章的操作。但是,如果 javascript 可用,则 jQuery 劫持表单的提交并通过 ajax 发布。因为评论标记在显示模板中,所以我不知道如何从操作方法返回它以便 jQuery 可以将它放在页面上。

我知道如何使用分部 View 执行此操作。我只会让操作方法返回正确的局部 View ,jquery 会将响应附加到页面上的评论容器。

在我为了部分 View 而砍掉我的显示模板之前,是否有一种直接的方法可以让我从 Controller 发回显示模板?

这是我的操作方法:

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

当页面加载时,它不需要担心,因为它以标准方式使用模板:

<div class="comments">
@Html.DisplayFor(x => x.BlogPost.BlogPostComments)
</div>

我只想知道如何将使用显示模板的单个评论发送回 jQuery。

最佳答案

您可以尝试返回表示新发表的评论的部分 HTML:

if (Request.IsAjaxRequest())
{
return PartialView(
"~/Views/Shared/DisplayTemplates/Comment.cshtml",
postComment
);
}

并在客户端将此评论附加到评论容器:

$.post('@Url.Action("AddComment")', { ... }, function (result) {
$('#comments').append(result);

// or $('#comments').prepend(result); if you want it to appear on top
});

关于c# - MVC 3 - 如何从操作方法返回显示模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com