将复杂JSON映射到MVC Action参数中的List

时间:2011-04-14 15:51:21

标签: jquery asp.net-mvc json

我有这样的课程

public class someList
{
   public string strOne {get; set;}
   public string strTwo {get; set;}
}
public class Entity
{
    public string EntityMember;
    public List<someList> entityList;
}

然后我有一个控制器和动作,

public ActionResult MyControllerAction(Entity objEntity)

如何使用JSON数据从浏览器发布表单,以便使用我的Entity对象进行映射。这是我提交表单的当前javascript函数,

function submitForm() {
    var Entity = {};
    var eList= new Array();

    eList[0] = { strOne: "91", strTwo: "12" };
    eList[1] = { strOne: "92", strTwo: "12" };

    Entity = { EntityMember: "Member Value", entityList: eList };
    $.post("/MyController/MyControllerAction", Entity);
}

但它不起作用。我能够获得EntityMember的值,但List对象不会来。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果这是针对asp.net mvc 3,则实体需要是stringfied

$.ajax({                                                    
        url: "/MyController/MyControllerAction",                                       
        type: "POST",                                           
        data: JSON.stringify(Entity),                          
        dataType: "json",                                       
        contentType: "application/json; charset=utf-8",         
        success: function (data) {                              
            ....                                     
        }                                                       
    });  

如果这是针对asp.net mvc 2,您还需要注册json提供者,请参考此link

你的工作不起作用的原因是jquery的内置序列化格式已被更改http://api.jquery.com/jQuery.param/

您需要将其设置为使用传统方式:

jQuery.ajaxSettings.traditional = true;

或使用不同的序列化方法。 (上面,我使用了stringify函数进行JSON绑定,这是JSON.org的json2.js的一部分)