我知道以前曾以类似的形式提出这个问题,但我在这里遇到了一些问题.... 我有这个尝试将json复杂类型传递给MVC2的经典问题。 问题(参考下面的代码):我可以将值“subincidentID”传递给控制器,但值“CodeType”,“MOCode”和“SubCode”都是NULL。 我已经安装了MVC2未来并在global.asax.cs中注册了“Microsoft.Web.MVC”并声明了JsonValueProviderFactory。
JQuery位:
$('#btnDone').click(function() {
var entity = {};
var dbCode = new Array();
dbCode[0] = { CodeType: "1", MoCode: "13", SubCode: "12" };
entity = { subincidentID: "1", codeData: dbCode };
$.ajax({
type: 'POST',
data: entity,
dataType: 'json',
async: false,
url: "/controller/SaveMOData",
success: function(result) {
alert('success!');
}
}); //end of post
}); //end of btnDone click function
MVC中的控制器:
[HttpPost]
public JsonResult SaveMOData(MOSubMitModel mo)
{
if (ModelState.IsValid)
{
}
return Json(new { success = "true" });
}
MVC(2)中的模型类:
public class MOSubMitModel
{
public int subIncidentID { get; set; }
public List<dbCode> codeData { get; set; }
}
public class dbCode
{
public string CodeType { get; set; }
public string subCode { get; set; }
public string MoCode { get; set; }
}
我错过了什么吗? 我是否必须在控制器页面上声明任何命名空间? 我确信这是一个小问题,但我整天都在摸不着头脑......: - (..
提前致谢。 W. Lam
答案 0 :(得分:0)
我使用以下语法
听说过问题$.ajax({
type: "POST",
data: {prop:"Value"},
....
}
相反,您需要对对象进行字符串化
$.ajax({
type: "POST",
data: JSON.stringify({prop:"Value"}),
....
}
答案 1 :(得分:0)
经过一些反复试验和读数后,我终于弄明白了(有关其他组件的详细信息,请参阅上一篇文章):
$('#btnDone').click(function() {
:
:
$.ajax({
type: 'POST',
data: JSON.stringify(entity),
contentType: 'application/json',
async: false,
url: "/controller/SaveMOData",
success: function(result) {
alert('success!');
}
}); //end of post
}); //end of btnDone click function
问题是我不要包含“contentType”(我之前尝试过json stringify但是如果我不包含contentType则它返回NULL)...所以...总结MVC2下的要求:
下载MVC Future .....解压缩MVC future zip文件并将Microsoft.web.mvc复制到您的项目中,并引用它在项目的global.asax.cs文件中,包含“Microsoft.web” .mvc“命名空间,然后在函数”Application_start“
的末尾包含以下行ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
如上所示,在jQuery中进行必要的更改。它应该工作(它对我有用!!)希望它可以帮助任何有同样问题的人。