6

Tôi cố gắng để vượt qua một mảng của int nhưng tôi không thể nhận được giá trị trong phương pháp WebAPIĐi qua mảng các số nguyên để WebAPI Phương pháp

var postData = { "deletedIds": deletedIds }; 

    $.ajax({ 
     type: "DELETE", 
     traditional: true, 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: false, 
     url: "/api/Management/Models", 
     data: JSON.stringify(postData), 
     success: ModelDeleted, 
     error: ModelNotDeleted 
    }); 

và trong apiController:

[HttpDelete] 
     public bool DeleteModel(int[] deletedIds) 
     { 
      return modelsRepository.DeleteModels(deletedIds); 
     } 
+0

tôi đã cố gắng để loại bỏ JSON.stringify nhưng vẫn không làm việc –

Trả lời

8

Mã của bạn trông khá Ok với tôi. Vui lòng xác định cấu trúc của đối tượng "deletedIds". một đề xuất là sử dụng đối tượng mảng mới() để khởi tạo thuộc tính deletedIds và xóa JSON.stringify(). Câu hỏi tương tự được hỏi here.

EDIT

Web API hỗ trợ phân tích dữ liệu nội dung theo nhiều cách khác nhau, nhưng nó không đối phó với các giá trị nội dung nhiều đăng. Một giải pháp cho vấn đề của bạn có thể là tạo một ViewModel với thuộc tính của kiểu int []. Giống như mã bên dưới,

public class SimpleViewModel 
{ 
    public int[] deletedIds{ get; set; } 
} 

//Controller 
[HttpDelete] 
    public bool DeleteModel(SimpleViewModel deletedIds) 
    { 
     return modelsRepository.DeleteModels(deletedIds.deletedIds); 
    } 

và sử dụng làm loại tham số.

+0

Tôi cố gắng để sử dụng mảng mới, nhưng vẫn nhận được null trên tham số phương pháp WebAPI –

+0

Cảm ơn bạn đã trả lời nhưng câu hỏi bạn tham chiếu không giống mã của tôi đang hoạt động tốt khi tôi sử dụng phương thức hành động trong bộ điều khiển thông thường nhưng khi url là webapi thì không thể lấy dữ liệu –

+0

Sử dụng firebug để kiểm tra dữ liệu bài đăng. – Shashank

0

Tôi nghi ngờ rằng bit xâu chuỗi đang làm rối tung đối tượng của bạn - bạn đã thử gán nó cho một biến để xem đó có phải định dạng mong muốn không?

Bạn đang stringifying toàn bộ điều vào lúc này:

{ "deletedIds": deletedIds }

trong khi những gì bạn có thể muốn gửi bài như cơ thể là thế này:

{ "deletedIds": JSON.stringify(deletedIds) }

+0

Và một trong hai cách, nếu phương pháp điều khiển của bạn mong đợi số nguyên, tại sao xâu chuỗi chúng trong JS? –

+0

stringify chỉ là một thử tôi tạo ra một phương pháp hành động thử nghiệm trong một bộ điều khiển thường xuyên và nó hoạt động mvc modelbinder hoạt động nhưng webapi không !! –

+1

@MuhammadAlaa - đăng chính xác JSON bạn đang gửi cùng với yêu cầu. Phương pháp điều khiển có bị ảnh hưởng không? Bạn đang nhận được một mảng trống? –

2

Cuối cùng, dựa trên @Shashank Trả lời nó hoạt động và mã được sửa đổi là:

var deletedIds = new Array(); 

deletedIds.push(modelId); 

var postData = { "DeletedIds": deletedIds }; 
$.ajax({ 
    type: "Delete", 
    traditional: true, 
    dataType: 'json', 
    cache: false, 
    url: "/api/Management/Models", 
    data: postData, 
    success: ModelDeleted, 
    error: ModelNotDeleted 
}); 

và apiController:

[HttpDelete] 
     public bool DeleteModels(DeleteViewModel dvm) 
     { 
      return modelsRepository.DeleteModels(dvm.DeletedIds); 
     } 

và cho DeleteViewModel:

public class DeleteViewModel 
    { 
     public int[] DeletedIds { get; set; } 
    } 
Các vấn đề liên quan