2012-03-09 70 views
5

Tôi có một phương pháp đăng ký bỏ phiếu cho một bình luận. Nếu không có lỗi trong khi truyền phiếu bầu, tôi trả về một đoạn mã html nhỏ thông qua PartialViewResult để cập nhật trang.Làm thế nào tôi có thể trả lại một chuỗi rỗng (hoặc null) cho một PartialViewResult?

Nếu nó không thành công, không có gì xảy ra. Tôi cần phải kiểm tra tình trạng này ở phía khách hàng.

Phương pháp server-side:

[HttpPost] 
public PartialViewResult RegisterVote(int commentID, VoteType voteType) { 
    if (User.Identity.IsAuthenticated) { 
     var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType); 
     if (userVote != null) { 
      return PartialView("VoteButtons", userCommentVote.Comment); 
     } 
    } 

    return null; 
} 

Client side script:

$(document).on("click", ".vote img", function() { 
    var image = $(this); 

    var commentID = GetCommentID(image); 
    var voteType = image.data("type"); 

    $.post("/TheSite/RegisterVote", { commentID: commentID, voteType: voteType }, function (html) { 
     image.parent().replaceWith(html); 
    }); 
}); 

Nếu bỏ phiếu được ghi nhận, các "html" containes biến đánh dấu như mong đợi. Nếu nó không thành công (tức là null đã được trả lại) thì biến "html" thay vào đó là đối tượng "Tài liệu" có lỗi phân tích cú pháp.

Có cách nào trả về một chuỗi rỗng từ PartialViewResult và sau đó chỉ kiểm tra độ dài không? Có cách nào khác tốt hơn để làm điều này không?

Trả lời

5

Thay đổi phương pháp chữ ký của bạn từ: public PartialViewResult

Để: public ActionResult

Sau đó, thay vì trả lại null, trở lại này:

return Json("");

này sẽ cho phép bạn quay trở lại một cái nhìn cục bộ nếu thành công, nếu không, nó sẽ trả về JSON với một chuỗi rỗng làm giá trị. JS hiện tại của bạn sẽ hoạt động như cũ. Từ MSDN:

Lớp ActionResult là lớp cơ sở cho kết quả hành động.

Các loại sau đây có nguồn gốc từ ActionResult:

  • ContentResult
  • EmptyResult
  • FileResult
  • HttpUnauthorizedResult
  • JavaScriptResult
  • JsonResult
  • RedirectResult
  • RedirectToRouteResult
  • ViewResultBase

Đây là những gì cho phép bạn trở lại các loại có nguồn gốc khác nhau trong phương pháp của bạn.

+0

Làm việc như một sự quyến rũ. Cảm ơn – Jason

0

Nó sẽ là tốt hơn để trả về một JsonResult như,

[HttpPost] 
    public JsonResult RegisterVote(int commentID, VoteType voteType) 
    { 
     JsonResult result = new JsonResult(); 
     object content; 
     if (User.Identity.IsAuthenticated) 
     { 
      var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType); 
      if (userVote != null) 
      { 
       content = new 
       { 
        IsSuccess = true, 
        VoteButtons = userCommentVote.Comment 
       }; 
      } 
      else 
      { 
       content = new { IsSuccess = false }; 
      } 
     } 
     result.Data = content; 
     return result; 
    } 

Trong Ajax cuộc gọi, bạn có thể xác nhận nếu IsSuccesstrue hoặc false.

Các vấn đề liên quan