What is the best approach to take when converting a basic ActionResult
to JSON
objects and rendering them in a PartialView
? My objective is to modify the application so that instead of the page rendering only the comments in the db at the time of the page request to a type of data service that updates thePartialView
to add any incoming comments that may have been posted since the last page request. I think the solution I am looking for will use OData
in json
format and then bind that data using knockout.js
, but not sure.
Here is the Controller ActionResult
which returns an IEnumerable
list of objects from the repository to a PartialView
:
[ChildActionOnly]
public ActionResult GetCommentsById(int AId = 0)
{
if (AId == 0)
return HttpNotFound();
return PartialView("_CommentsPartial",
_unitOfWork.ArticleRepository.GetCommentsByArticleId(AId));
}
Here is a snippet of the PartialView
to keep things short:
@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">
Then I call it from the Details view:
<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>
How can I make this conversion as painless as possible? Thanks in advance!