2012-07-20 83 views
6

參數​​即將變爲null。MVC模型從jQuery中綁定字符串數組

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) { 
     //... 
    }); 
}); 

提琴手

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 

這是造成問題的方括號嗎?我怎樣才能綁定到這些數組?

編輯:我手動構建查詢字符串的同時。

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

使用此處發佈的解決方案。 http://stackoverflow.com/questions/4402036/jquery-ajax-posting-array-to-asp-net-mvc-controller – BradLaney 2013-05-02 20:25:59

回答

0

這裏有一篇關於通過POST傳遞多個參數的好文章。

POST Multiple parameters

它在談論的WebAPI,但仍是在這種情況下有關。

+0

我沒有看到任何關於那裏的集合。也許我會手動構建一個MVC理解的字符串。 – Benjamin 2012-07-20 17:49:01

3

您需要撥打某種JSON.stringify的數據。

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

它仍然沒有約束力。這產生'{「orderIds」:[「97」,「98」,「99」],「orderTypeNames」:[「DeliveryOrder」,「DeliveryOrder」,「DeliveryOrder」]}。有什麼我應該改變在mvc行動參數? – Benjamin 2012-07-20 16:34:59

1

@Benjamin。這裏有一個更詳細的例子,我做了什麼,那個作品

<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> 

希望這會有所幫助。

編輯:這裏是匹配的C#對象

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; } 
} 

你所有的類型名稱需要匹配。以下是接收呼叫的代碼

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

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

謝謝。這看起來有點類似於像scottm那樣調用stringify的結果。它似乎不像MVC想綁定到JSON。有沒有必要在控制器中完成綁定到json數組? – Benjamin 2012-07-23 15:34:37

+0

@Benjamin。我已經使用過這些代碼,並且只需進行一些更改即跨域,並且不會出現任何問題。在這種情況下,我將擁有一個C#Filter對象和適當的屬性。我將添加C#類,以便您可以看到會發生什麼。如果你的映射不起作用,那麼在你的對象類中可能有問題,關於數據類型/名稱 – stevethethread 2012-07-23 15:55:51

+0

與默認的asp.net mvc模型綁定相比,這聽起來有點複雜。 – Benjamin 2012-07-23 15:58:30