将基本ActionResult
转换为JSON
个对象并将其呈现在PartialView
时,最佳方法是什么?我的目标是修改应用程序,以便在页面请求时,只将页面中的注释呈现给更新PartialView
的数据服务类型以添加任何可能已有的传入注释。自上一页请求以来发布。我认为我要寻找的解决方案将以OData
格式使用json
,然后使用knockout.js
绑定该数据,但不确定。
这是Controller ActionResult
,它将IEnumerable
对象列表从存储库返回到PartialView
:
[ChildActionOnly]
public ActionResult GetCommentsById(int AId = 0)
{
if (AId == 0)
return HttpNotFound();
return PartialView("_CommentsPartial",
_unitOfWork.ArticleRepository.GetCommentsByArticleId(AId));
}
以下是PartialView
的一小段内容:
@model IEnumerable<BlogSite.Models.Comment>
@using BlogSite.Helpers;
<ul id="comments-list">
@{
foreach (var comment in Model)
{
<!--Grabs Parent Comment and then all replies w/ParentCommentId b4 grabs new Parent Comment -->
if (comment.isRoot && comment.ParentCommentId == null)
{
<!-- Comment -->
int counter = 0; foreach (var c in Model) { if (c.ParentCommentId == comment.CommentId) { counter += 1; } }
<li id="@comment.CommentId" itemscope itemtype="http://schema.org/UserComments" class="comment-container" tabindex="@comment.CommentId">
然后我从详细信息视图中调用它:
<div id="comments-panel" class="panel-box">
<div class="show-comments"><div id="upNdown"></div><span id="showNhide">Show Comments</span></div><br /> <br />
<div id="comments-partial" style="display:none;">
@Html.Action("AddComment", "Comment", new { AId = Model.ArticleId })
@Html.Action("GetCommentsById", "Article", new { AId = Model.ArticleId })
</div>
</div>
如何让这种转换尽可能轻松?提前谢谢!
答案 0 :(得分:1)
我想我从你的问题中得知控制器已经完成了它的工作,而你只是想“消耗”它的数据输出,好像它是一个使用相同js代码的AJAX请求。只需使用Newtonsoft Json.NET提供的Forloop.HtmlHelpers api和扩展序列化模型中的数据,即可轻松完成此操作。如果您还没有这些,可以将它们安装为nuget包。
首先,您可以将其置于局部视图中
注意:如果您不想安装Newtonsoft软件包,可以使用System.Web.Helpers方法替换 JsonConvert.SerializeObject
Json.Encode
@{
using (var context = Html.BeginScriptContext())
{
Html.AddScriptBlock("var jsonData=" + JsonConvert.SerializeObject(Model) + ";");
}
}
然后在布局页面中,为确保在适当的时间呈现脚本块,请将此调用添加到Html.RenderScripts
@Scripts.Render("~/bundles/jquery")
@*Add any other dependency scripts*@
@Html.RenderScripts()
@RenderSection("scripts", required: false)
这就是你需要Forloop.HtmlHelpers包的原因,这些扩展方法有助于减少在jQuery或其他任何东西启动之前在局部视图中呈现的无序脚本代码。
希望有所帮助