0

好的,所以我有一个半工作的博客,我试图让评论功能齐全。现在,我的所有帖子都正确显示,并带有所有相应的评论。这样做的一个问题是您实际上无法通过该站点添加评论(我只是手动进行的)。

我以前在我的控制器中创建了“创建”方法,但只能通过自动脚手架。

现在我将一个 ViewModel 传递给页面,如下所示(这会抓取与博文本身相关的主题和评论。

public ActionResult Post(int id)
{
    var post = (from p in db.Set<BlogPost>()
                where p.id == id
                select new PostViewModel
                           {
                              Id = p.id,
                              Title = p.Title,
                              DateCreated = p.DateCreated,
                              Content = p.Content,
                              Topics = p.Topics,
                              Comments = p.Comments,
                              CommentCount = p.Comments.Count
                          }).Single();

    return View(post);
}

然后我把它作为我的 Post.cshtml ......

<div class="blogpost">
    <h2>@Model.Title</h2>
    <div class="post_info">@Model.DateCreated<span class="right">Blog</span></div>
    <p>@Html.Raw(Model.Content)</p>
    <div class="post_close">
        <span class="left">
            @foreach (var topic in Model.Topics)
            {
                <text>@Html.DisplayFor(modelItem => topic.Name) </text>
            }
        </span>
        <span class="right">
            <img src="../../Content/images/comment.jpg" alt="" />
            @if (Model.CommentCount > 1 || Model.CommentCount == 0)
            { 
                @Model.CommentCount <text>comments</text> }
            else
            {
                @Model.CommentCount <text>comment</text>
            }
        </span>
    </div>
</div>
<div id="comments">
    @foreach (var comment in Model.Comments)
    {
        <b>@Html.DisplayFor(modelItem => comment.Name)</b> <text>says... </text><br />
        <i>@Html.DisplayFor(modelItem => comment.Content)</i><br />
    }
</div>

在“评论” div 中,我想为人们添加一种创建新评论的方式。显然,这不会以传统方式完成,ViewModel 是 Model 而不仅仅是 Comments 模型。关于从哪里开始的任何建议?

我基本上是 MVC3 的新手,与我习惯使用 Web 表单相比,回发的整个想法非常令人困惑。任何帮助都会很有用,谢谢!

(我将使用某人可能需要的任何其他信息来编辑这篇文章)

4

1 回答 1

1

我还没有,我强烈建议你开始学习一些 jquery。我自己会创建一个带有提交按钮的 ajax 样式评论框,只有经过身份验证的用户、openid 或自定义成员资格提供程序才能访问该评论框。

您将想要学习如何在 jquery 中使用 $.ajax 和 $.post 方法,以及构建与这些方法一起使用的 json 对象。

<input type="textarea" id="commentBox"></input>
<input type="button" onclick="submitComment();" value="SUBMIT" />

function submitComment(){
     var newComment = {
         comment: $("#commentBox").val(),
         blogpostid: $("#PostID").val()
     }

     $.post("/BlogPost/AddComment",newComment,function(data){
           // append text to bottom of comments
           if(data.Error){
               alert(data.ErrorMessage);
           } else {
               $("#comments").append('<div id="commentDiv">' + newComment.comment + '</div'>);
           }
     });
}

您的 BlogPost 控制器

public JsonResult AddComment(string comment, int blogpostid)
{
      // snag user info from authenticated session

      // save comment

      // return an object that has a boolean and a string it would look something like this.

      var commentResult = new object{ Error = true, ErrorMessage = 'we could not save the comment'};

      return Json(commentResult);
}

这并没有涵盖所有内容,您还需要在客户端和服务器端编写更多代码,包括安全措施。

于 2012-04-30T21:24:19.153 回答