json ajax复杂类型传递给MVC2动作

时间:2012-02-07 06:34:47

标签: ajax json asp.net-mvc-2 model

我知道以前曾以类似的形式提出这个问题,但我在这里遇到了一些问题.... 我有这个尝试将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

2 个答案:

答案 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中进行必要的更改。它应该工作(它对我有用!!)希望它可以帮助任何有同样问题的人。