0

私のコードで他に何が必要ですか、私はこれまでにこれを持っています:

  <script type="text/javascript">
 function PostNewsComment(newsId) {
  $.ajax({
    url: "<%= Url.Action("AddCommentOnNews", "Home", new { area = "News" }) %>?newsId=" + newsId + "&newsComment=" + $("#textareaforreply").val(), success: function (data) {
      $("#news-comment-content").html(data + $("#news-comment-content").html());
      type: 'POST'
    }
  });
}
$("#textareaforreply").val("");
</script>

    [HttpPost]
[NoCache]
public ActionResult AddCommentOnNews(int newsId, string newsComment)
{
  if (!String.IsNullOrWhiteSpace(newsComment))
  {
    var currentUser = ZincService.GetUserForId(CurrentUser.UserId);
    ZincService.NewsService.AddCommentOnNews(newsId, newsComment, currentUser.UserId);

    Zinc.DataModels.News.NewsCommentsDataModel model = new DataModels.News.NewsCommentsDataModel();
    var today = DateTime.UtcNow;
    model.CommentDateAndTime = today;
    model.NewsComment = newsComment;
    model.Firstname = currentUser.Firstname;
    model.Surname = currentUser.Surname;
    model.UserId = CurrentUser.UserId;
    return View("NewsComment", model);
  }

  return null;
}


<div class="actions-right">    
  <a href="javascript:PostNewsComment(<%: Model.News.NewsId %>);" class="button" id="post_button"><%: Html.Resource(Resources.Global.Button.Reply) %></a>                
</div>

FFでは動作しないので、これがどのように動作するのかわかりません??? もう1つは、returnnullを渡してはいけないということです。JSONfalseを渡してはいけません???

助けてください?ありがとう

4

1 に答える 1

1

リクエストパラメータをエンコードする必要があります。今、あなたはそれらを間違ったアプローチである強力な連結で要求に連結しました。dataパラメータをAJAXリクエストに渡し、適切なurlエンコーディングをフレームワークに残すことができるというプロパティがあります。

function PostNewsComment(newsId) {
    $.ajax({
        url: '<%= Url.Action("AddCommentOnNews", "Home", new { area = "News" }) %>', 
        type: 'POST',
        data: { 
            newsId: newsId, 
            newsComment: $('#textareaforreply').val() 
        },
        success: function (data) {
            $('#news-comment-content').html(data + $('#news-comment-content').html());
        }
    });
}

また、この関数をどこでどのように呼び出しているかを示していませんがPostNewsComment、リンクまたは送信ボタンのクリックでこれが発生した場合は、次のようにfalseを返すことでデフォルトのアクションをキャンセルしたことを確認してください。

$('#someLink').click(function() {
    PostNewsComment('123');
    return false;
});

もう1つは、returnnullを渡してはいけないということです。JSONfalseを渡してはいけません???

JsonResultこの場合、コントローラーアクションにaを返すようにすることができます。

return Json(new { success = false });

次に、成功コールバック内で、この条件をテストできます。

success: function (data) {
    if (!data.success) {
        // the server returned a Json result indicating a failure
        alert('Oops something bad happened on the server');
    } else {
        // the server returned the view => we can go ahead and update our DOM
        $('#news-comment-content').html(data + $('#news-comment-content').html());
    }
}

おそらく注意すべきもう1つのことは、コメントテキストなどの<または>コメントテキスト内の危険な文字の存在です。これらの文字を許可するには、ビューモデルを作成し、対応するプロパティを次の[AllowHtml]属性で装飾することをお勧めします。

public class NewsViewModel
{
    public int NewsId { get; set; }

    [AllowHtml]
    [Required]
    public string NewsComment { get; set; }
}

これで、コントローラーアクションは明らかにビューモデルを引数として取ります。

[HttpPost]
[NoCache]
public ActionResult AddCommentOnNews(NewsViewModel viewModel)
{
    if (!ModelState.IsValid)
    {
        var currentUser = ZincService.GetUserForId(CurrentUser.UserId);
        ZincService.NewsService.AddCommentOnNews(viewModel.NewsId, viewModel.NewsComment, currentUser.UserId);

        var model = new DataModels.News.NewsCommentsDataModel();
        var today = DateTime.UtcNow;
        model.CommentDateAndTime = today;
        model.NewsComment = newsComment;
        model.Firstname = currentUser.Firstname;
        model.Surname = currentUser.Surname;
        model.UserId = CurrentUser.UserId;
        return View("NewsComment", model);
    }

    return Json(new { success = false });
}
于 2013-01-22T11:54:50.890 に答える