将一个 JavaScript 类的数组传递给 MVC 控制器?

3
我正在尝试将服务数组传递给我的控制器。 我尝试了多种不同的方法来使其工作,比如在进入控制器之前序列化数据、序列化每个服务等等,但唯一有效的方法是将控制器参数更改为字符串并对数组进行序列化,然后使用JsonConvert,但我宁愿不这样做。
通过指定的代码,我可以在列表中获得正确数量的项目,但它们都包含有一个空行会ID的服务ID,并且服务提供者ID为null。
有任何想法吗?
Javascript
function ServiceItem() {
    this.ServiceProviderID = 'all';
    this.ServiceID = '';
}
var selecteditems= (function () {
var services = new Array();
return { all: function() { return services; }, add: function(service) { services.push(service); } };
})();
var reserved = []; $.each(selecteditems.all(), function(index, item){ reserved.push({ ServiceID: item.ServiceID, ServiceProviderID: item.ServiceProviderID}); });
getData('Controller/GetMethod', { items: reserved }, function(result) { });
var getData = function (actionurl, da, done) { $.ajax({ type: "GET", url: actionurl, data: da, dataType: "json", async: true, success: function (d) { if (typeof (done) == 'function') { var str = JSON.stringify(d); done(JSON.parse(str)); } } }); };
控制器
public JsonResult GetMethod(List<CustomObject> items)
{
}
自定义对象
public class CustomObject
{
   public Guid ServiceID {get;set;}
   public Guid? ServiceProviderID {get;set;}
}
1个回答

3

设置content-type,并使用POST而不是GET(因为它是复杂类型对象的列表)。还需在操作上标记HttpPost属性。

看看这是否有效:

 $.ajax({
           type: "POST",
           url: actionurl,
           data: JSON.stringify(da),
           dataType: "json",
           contentType: 'application/json',
           async: true,
           success: function (d) {
               if (typeof (done) == 'function') {
                   var str = JSON.stringify(d);
                   done(JSON.parse(str));
               }
           }
       });

getData其实是我用于所有数据库调用的方法.. 但我将{items:reserved}传递给它.. - jaekie
传统模式:真,使列表包含0行,之前是2行但为空值。 - jaekie
@csharpdev 可能是由于复杂对象类型使用了 POST 而不是 GET。 - PSL
Kodos,它奏效了...改成了POST,我甚至没有想到! - jaekie
@csharpdev GET方法适用于简单类型,如列表或整数等。但对于复杂类型可能无法正常工作。在使用GET时,您可以在URL中查看数据的传输方式。 - PSL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接