向MVC控制器提交JSON数据。为什么它不处理复杂类型?

向MVC控制器提交JSON数据。为什么它不处理复杂类型?,json,asp.net-mvc-2,version-control,post,complextype,Json,Asp.net Mvc 2,Version Control,Post,Complextype,将C#helper类定义为: ` 公共类选定文件 { 公共字符串主机{get;set;} public List<SelectedFile> Files { get; set; } } public class SelectedFile { public string ShortName {get; set;} public string Category { get; set; } }` 第

将C#helper类定义为:

`
公共类选定文件 { 公共字符串主机{get;set;}

        public List<SelectedFile> Files { get; set; }
    }

    public class SelectedFile
    {

        public string ShortName {get; set;}

        public string Category { get; set; }


    }`
第一个.ajax POST方法将起作用。基本上,将序列化JSON对象作为字符串转储到控制器方法

第二个.ajax帖子不起作用。它似乎没有弄清楚如何从参数列表中反序列化“SelectedFiles”助手类


一个词:“Flabergasted”

在第二种情况下,预期的post数据是SelectedFile的集合。您尝试过吗

$.ajax({url:"UploadFiles", type:'POST', traditional:true,  data: SelectedFiles, success: function(result){ alert(result);} });

您需要将您的帖子内容类型标记为json。此外,MVC将模型绑定到您的模型,这样您就不需要使用字符串作为操作参数。Phil Haack在他的博客上有一个。您已经用ASP.NET MVC 2标记了您的问题,如果这是正确的,您没有现成的json绑定支持。JsonValueProviderFactory在ce ASP.NET MVC 3.要在以前版本的ASP.NET MVC中绑定JSON,您需要创建一个值提供程序或模型绑定器。您可以在此处阅读更多信息:

您有实际问题吗?问题是“为什么这不起作用”?我遗漏了一些琐碎的东西吗?这是MVC部件的已知限制吗?我遗漏了,但运气不好。以这种方式调用它也是我的第一直觉。谢谢tpeczek。你正确地注意到了MVC 2标记。这个隐藏的功能正在解决问题!
        var SelectedFiles = [];
        var SelectedFile;

        selectedCheckBoxes.each(function(idx, element){
            SelectedFile = {ShortName: element.value, Category: "a category"};                
            SelectedFiles.push(SelectedFile);
        });            

        var selectedFileMessage = {};
        selectedFileMessage.Host = "test"
        selectedFileMessage.Files = SelectedFiles;

        var message = $.toJSON(selectedFileMessage);            


        $.ajax({url:"UploadFilesJSON", type:'POST', traditional:true,  data: { selectedFilesJSON : message } , success: function(result){ alert(result);} });            

        $.ajax({url:"UploadFiles", type:'POST', traditional:true,  data: { selectedFilesJSON : selectedFileMessage } , success: function(result){ alert(result);} });      
$.ajax({url:"UploadFiles", type:'POST', traditional:true,  data: SelectedFiles, success: function(result){ alert(result);} });