2012-07-20 89 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