2012-07-20 27 views
6

Tham số string[] orderTypeNames sắp xuất hiện.Mô hình MVC ràng buộc một mảng chuỗi từ bài đăng jQuery

hành động MVC

public PartialViewResult EditMultipleOrderStates(
    string[] orderTypeNames, 
    int[] orderIds) 

javascript

$('#edit-mulitple-order-states-button').click(function() { 
    ids = []; 
    types = []; 
    $checked = $('.order-queue-order input:checked'); 
    $orders = $checked.closest('.order-queue-order'); 
    $orders.each(function (index, elem) { 
     $order = $(elem); 
     ids.push($order.attr("orderId")); 
     types.push($order.attr("orderType")); 
    }); 
    data = { 
     orderIds: ids, 
     orderTypeNames: types 
    }; 
    $.post('EditMultipleOrderStates', data, function (response) { 
     //... 
    }); 
}); 

cáy

enter image description here

orderIds%5B%5D=97&orderIds%5B%5D=98&orderIds%5B%5D=93&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder 

Đây có phải là dấu ngoặc vuông gây ra sự cố không? Làm thế nào tôi có thể liên kết với các mảng này?

Chỉnh sửa: Tôi đang tạo chuỗi truy vấn theo cách thủ công trong thời gian trung bình.

query = ""; 
for each... 
query += "orderIds=" + $order.attr("orderId") + "&"; 
query += "orderTypeNames=" + $order.attr("orderType") + "&"; 
+1

Sử dụng giải pháp được đăng tại đây. http://stackoverflow.com/questions/4402036/jquery-ajax-posting-array-to-asp-net-mvc-controller – BradLaney

Trả lời

0

Có một bài viết hay về cách chuyển nhiều thông số qua POST ở đây.

POST Multiple parameters

Đó là nói về WebApi nhưng vẫn có liên quan trong trường hợp này.

+0

Tôi không thấy gì về bộ sưu tập trong đó. Có lẽ tôi sẽ tự xây dựng một chuỗi mà MVC hiểu được. – Benjamin

3

Bạn cần gọi một số loại JSON.stringify trên dữ liệu.

$.post('EditMultipleOrderStates', JSON.stringify(data), function (response) { 
     //... 
    }); 
+0

Nó vẫn không ràng buộc. Điều đó tạo ra '{" orderIds ": [" 97 "," 98 "," 99 "]," orderTypeNames ": [" DeliveryOrder "," DeliveryOrder "," DeliveryOrder "]}'. Có cái gì tôi nên thay đổi trong các thông số hành động mvc? – Benjamin

1

@Benjamin. Dưới đây là một ví dụ chi tiết hơn về những gì tôi đã làm, hoạt động

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 

      var filter = { 
       OrgId: 3, 
       Drivers: [{ Name: "SGT-200" }, { Name: "SGT-100"}], 
       DrivenUnits: [{ Name: "Generator" }], 
       Regions: [{ Name: "REU" }], 
       SearchString : "Test search string" 
      }; 

      $.ajax(
       { 
        url: "/api/Dashboard/PostFilter", 
        type: "POST", 
        contentType: "application/json", 
        dataType: "json", 
        data: JSON.stringify(filter), 
        success: function(result) { 
         alert(result); 
        }, 
        error: function(error) { 

         alert("There was an error posting the data to the server: " + error.responseText); 

        } 
       }); 
     }); 
    }); 
</script> 

Hy vọng điều này sẽ hữu ích.

EDIT: Và đây là các khớp C# đối tượng

public class Filter 
{ 
    public int OrgId { get; set; } 
    public List<FilterData> Drivers { get; set; } 
    public List<FilterData> DrivenUnits { get; set; } 
    public List<FilterData> Regions { get; set; } 
    public List<FilterData> Operations { get; set; } 
    public List<FilterData> Connections { get; set; } 
    public string SearchString { get; set; } 
} 

public class FilterData 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
    public int Count { get; set; } 
} 

Tất cả các tên kiểu của bạn cần phải phù hợp. Và bên dưới là mã nhận được cuộc gọi

public IQueryable<DashboardData> Post(Filter filter) { 
     using(_unitOfWork) 
     { 
      _dashboardRepository.UsingUnitOfWork(_unitOfWork); 

      return FilterDashboardData(_dashboardRepository.GetDashboardData(filter.OrgId), filter); 
     } 
    } 
+0

Cảm ơn bạn. Điều đó có vẻ hơi giống với kết quả của việc gọi stringify như scottm được đề nghị. Nó không có vẻ như MVC muốn ràng buộc với json. Có cái gì đó đã được thực hiện trong bộ điều khiển để liên kết với các mảng json? – Benjamin

+0

@Benjamin. Tôi đã sử dụng mã này, cả khi nó đang có, và với một vài thay đổi, tên miền chéo, và có nó làm việc không có vấn đề. Trong trường hợp tôi sẽ có một đối tượng C# Filter, với các thuộc tính thích hợp. Tôi sẽ thêm lớp C# để bạn có thể thấy điều gì xảy ra.Nếu ánh xạ của bạn không hoạt động, thì có thể có điều gì đó sai trong các lớp đối tượng của bạn, liên quan đến kiểu dữ liệu/tên – stevethethread

+0

Điều này nghe có vẻ hơi phức tạp so với mô hình ràng buộc mvc asp.net mặc định. – Benjamin

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