向MVC控制器提交JSON数据。为什么它不处理复杂类型?
将C#helper类定义为: `向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; } }` 第
公共类选定文件 { 公共字符串主机{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);} });