0

さて、コメントを完全に機能させようとしている半作業ブログがあります。現在、すべての投稿が、対応するすべてのコメントとともに正しく表示されています。これに関する 1 つの問題は、サイトから実際にコメントを追加できないことです (手動で行っているだけです)。

以前にコントローラーで「作成」メソッドを作成しましたが、自動スキャフォールディングのみでした。

現在、次のように 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 を使用した従来の方法では行われません。ここから始めるべきアドバイスはありますか?

私は基本的に MVC3 に不慣れで、ポストバックの全体的な考え方は、Web フォームで慣れていたものと比べて非常に混乱しています。どんな助けでも役に立ちます、ありがとう!

(誰かが必要とするかもしれない追加情報でこの投稿を編集します)

4

1 に答える 1

1

jquery の学習を開始することを強くお勧めします。私自身は、認証されたユーザー、openid、またはカスタム メンバーシップ プロバイダーのみがアクセスできる送信ボタン付きの ajax スタイルのコメント ボックスを作成します。

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 に答える