4

私はasp .net mvc3が初めてです。単純なブログ コメント セクションを作成しようとしています。

私はコメントビューモデルを持っています

public class CommentsViewModel
{
    public CommentModel NewComment { get; set; }
    public IList<CommentModel> CommentsList { get; set; }
}

対応するビューは次のようになります

<div id="CommentsArea">
@Html.Partial("CommentsList", Model.CommentsList)
</div>
@using (Ajax.BeginForm("Create",
                   "Comment",
                   new { id = Model.NewComment.detailsId, comment = Model.NewComment },
                   new AjaxOptions { UpdateTargetId = "CommentsArea" ,
                                     HttpMethod = "Post",
                                     InsertionMode = InsertionMode.Replace}))
{
<div class="display-label">Add Comment</div>
<div class="display-field">
    @Html.EditorFor(model => Model.NewComment.Body)
</div>
<input type="submit" value="Post" />
}

ユーザーが投稿ボタンを入力すると、「CommentsArea」が新しいコメントリストで更新され、フォームの値が空のテキストでクリアされます。

Post メソッドは次のとおりです。

[HttpPost]
    public ActionResult Create(int id, CommentModel newcomment)
    {
        var newsItem = m_db.NewsList.Single(news => news.Id == id);
        if (!string.IsNullOrWhiteSpace(newcomment.Body))
        {
                newcomment.detailsId = id;
                newsItem.Comments.Add(newcomment);
                m_db.SaveChanges();
        }

        return PartialView("CommentsList", newsItem.Comments);
    }

ユーザーが [投稿] ボタンをクリックすると、リストは適切に更新されますが、フォームの値はクリアされません。つまり、「新しいコメント」というコメントを投稿した場合、コメント リストは「新しいコメント」で更新されますが、そのテキストはフォームの編集ボックス内に残ります。

そのテキストをクリアするにはどうすればよいですか?

4

1 に答える 1

0

フォームの送信が成功したら、js関数を呼び出すだけです。

@using (Ajax.BeginForm("Create",
                   "Comment",
                   new { id = Model.NewComment.detailsId, comment = Model.NewComment },
                   new AjaxOptions { OnSuccess="ClearInput", HttpMethod = "Post",}))

js関数でレンダリングビューを再度作成します

function ClearInput(){
      //call action for render create view
      $.ajax({})
}
于 2012-04-05T13:47:03.727 に答える