2010-05-14 27 views
21

Tôi đang sử dụng ASP.NET MVC với jQuery. Tôi có hành động MVC sau đây trả về một phần trang thành công. Trên Lỗi ứng dụng, tôi không chắc chắn nên gửi gì để xử lý chính xác nó ở phía máy khách:Cách trả về lỗi trong kịch bản Ajax

public ActionResult LoadFilterSet(int filterSetId) 
{ 
    try 
    { 
     BreadCrumbManager bcManager = this.ResetBreadCrumbManager(this.BreadCrumbManagerID); 
     GeneralHelper.LoadBreadCrumbManager(bcManager, filterSetId); 

     ViewData["BreadCrumbManager"] = bcManager; 
     return View("LoadFilterSet"); 
    } 
    catch (Exception ex) 
    { 
     return Content(""); 
    } 
} 

Sau đây là lời gọi jQuery ajax của tôi. Lưu ý rằng tôi đang kiểm tra độ dài dữ liệu để đảm bảo không có lỗi. Xin đề nghị tôi một cách tốt hơn để làm điều này.

$.ajax({ 
    type: "GET", 
    dataType: "html", 
    async: true, 
    data: ({ filterSetId: selectedId }), 
    url: link, 
    contentType: "text/html; charset=utf-8", 
    success: function(data, textStatus) { 
     if (data.length > 0) { 
      // Clear the local filters first. 
      clearLocalFilters(); 
      $('td.selected-filters table.filters-display').append(data); 
     } 
    } 
}); 

Trả lời

32

tôi sẽ thêm một hàm lỗi trong của bạn thiết lập cuộc gọi ajax. Hãy để máy chủ xác định thông báo lỗi để hiển thị và truyền nó cho trình xử lý lỗi ajax và để nó hiển thị nó.

success: function(data, textStatus) {  
    // Clear the local filters first.  
    clearLocalFilters();  
    $('td.selected-filters table.filters-display').append(data);   
}, 
error: function (data) { 
    alert(data.responseText); // use any display logic here 
} 

Trong hành động của bộ điều khiển của bạn, nếu một lỗi được tìm thấy

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
return Content(errorMessage, MediaTypeNames.Text.Plain); 
+0

kích hoạt lỗi ajax. Tôi thích câu trả lời này. – mohang

+0

loại 'Nội dung' là gì? Tôi không thấy nó trong tài liệu. tất cả những gì tôi thấy là 'ContentResponse' mà không lấy một mã trạng thái,' HttpStatusCodeResult' kết thúc lỗi trong một trang html và 'System.Web.UI.WebControls.Content' hoàn toàn khác – roo2

1

Tôi nghĩ rằng bạn có thể làm return Content(false.ToString().ToLower()); nếu một lỗi được ném ra, và sau đó kiểm tra xem dữ liệu là không sai

if(data != false) 
{ 

    //do stuff 
} 

hoặc

if(!data) 
    alert("Error"); 
else 
{ 
    //do stuff 
} 
+0

Hi Knepe, Đây là nhiều hơn hoặc ít hơn những gì tôi đang làm trong hàm thành công. Điều này chỉ cho phép một trường hợp lỗi. Nếu tôi muốn đưa ra lý do chính đáng cho thất bại, tôi sẽ không thể làm điều đó một cách thanh lịch bằng cách sử dụng phương pháp này. – mohang

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