Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript类数组传递给MVC控制器?_Javascript_Ajax_Asp.net Mvc_Json - Fatal编程技术网

将Javascript类数组传递给MVC控制器?

将Javascript类数组传递给MVC控制器?,javascript,ajax,asp.net-mvc,json,Javascript,Ajax,Asp.net Mvc,Json,我正试图将一系列服务传递给我的控制器。 我尝试了很多不同的方法来让它工作,在进入控制器之前序列化数据,序列化每个服务,唯一有效的方法是将控制器参数更改为字符串并序列化数组,然后使用JsonConvert,但我不想这样做 使用指定的代码,我将获得列表中正确数量的项目,但它们都包含一个带有空帮会的服务id,并且服务提供商id为null 有什么想法吗 Javascript function ServiceItem() { this.ServiceProviderID = 'all';

我正试图将一系列服务传递给我的控制器。 我尝试了很多不同的方法来让它工作,在进入控制器之前序列化数据,序列化每个服务,唯一有效的方法是将控制器参数更改为字符串并序列化数组,然后使用JsonConvert,但我不想这样做

使用指定的代码,我将获得列表中正确数量的项目,但它们都包含一个带有空帮会的服务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)); } } }); }; 函数ServiceItem(){ this.ServiceProviderID='all'; this.ServiceID=''; } var selecteditems=(函数(){ var services=newarray(); 返回{ 全部:函数(){ 返回服务; }, add:功能(服务){ 服务。推送(服务); } }; })(); 保留var=[]; $.each(selecteditems.all(),函数(索引,项){ 保留.push({ServiceID:item.ServiceID,ServiceProviderID:item.ServiceProviderID}); }); getData('Controller/GetMethod',{items:reserved},函数(result){ }); var getData=function(actionurl、da、done){ $.ajax({ 键入:“获取”, url:actionurl, 资料来源:da, 数据类型:“json”, async:true, 成功:功能(d){ if(typeof(done)=“函数”){ var str=JSON.stringify(d); 完成(JSON.parse(str)); } } }); }; 控制器

public JsonResult GetMethod(List<CustomObject> items) { } 公共JsonResult GetMethod(列表项) { } 自定义对象

public class CustomObject { public Guid ServiceID {get;set;} public Guid? ServiceProviderID {get;set;} } 公共类CustomObject { 公共Guid ServiceID{get;set;} 公共Guid?ServiceProviderID{get;set;} }
设置内容类型并使用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}..traditional:true,使列表包含0行,之前是2行,但为空values@csharpdev可能是因为复杂的对象类型使用POST而不是GET.kodos,它起作用了。。。换了个帖子,没想到@csharpdev GET将适用于简单类型。如列表或Int等。。但可能不适用于复杂类型。您可以在url中看到使用get时数据是如何运行的。