将列表从视图传递到控制器

时间:2012-11-07 04:42:08

标签: asp.net-mvc-3 jquery

我正在尝试将List从视图传递到控制器但我得到空值。代码编写如下:

模特课:

public class testModel
{
    public int ID { get; set; }

    public string Name { get; set; }

    public List<myModel> ParameterList {get;set;}
}

将数据发布到控制器的jquery和ajax代码:

var myModel = {
                  "Name":"test",      
                  "Description":"desc"      
                };

        var Object = {
            Name: $("#Name").val(),
            ParameterList : myModel
        };

        $.ajax({
            url: '/controller/action',
            type: 'POST',
            data: JSON.stringify(Object),
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {   }
                else { }
            }
        });

我获得了Name属性的值,但没有获得ParameterList的值。 这有什么不对?我错过了什么吗?

请帮帮我。

由于

编辑:来自评论的控制器代码,

 public JsonResult Save(Object Obj) 
 {
 // logic for managing model and db save
 } 

3 个答案:

答案 0 :(得分:3)

你说,

  

我获得了Name属性的值,但没有获得ParameterList的值。

这让我想知道myModel的结构是什么,因为你已经将ParameterList声明为myModel类型的列表:List<myModel> ParameterList

另外,我建议您将JSON.stringify(Object)记录到控制台并检查您实际发布到控制器的Json值。

以下是我发现你必须回复的内容

{"Name":"yasser","ParameterList":{"Name":"test","Description":"desc"}} 

另请阅读这些文章:

How can I pass complex json object view to controller in ASP.net MVC

Pass JSON object from Javascript code to MVC controller

答案 1 :(得分:1)

试试这个:

var myModel = [{
              "Name":"test",      
              "Description":"desc"      
            }];

    var Object = {
        Name: $("#Name").val(),
        ParameterList : myModel
    };

    $.ajax({
        url: '/controller/action',
        type: 'POST',
        data: Object,
        dataType: 'json',
        traditional: true,
        contentType: 'application/json; charset=utf-8',
        success: function (data) {   }
            else { }
        }
    });

答案 2 :(得分:0)

试试这样......希望这会有所帮助!!

脚本:

var emp = [{ 'empid': 1, 'name': 'sasi' },{ 'empid': 2, 'name': 'sathish'}];
emp = JSON.stringify(emp)
$.post("/Home/getemplist/", { 'emp': emp })

控制器:

这里我只是将参数更改为字符串类型。使用JavaScriptSerializer,您可以将此字符串数据转换为类列表对象..如果您在下面看到我的代码,您可以更好地理解它:

public void getemplist(string emp) 
{
    List<Emp> personData;
    JavaScriptSerializer jss = new JavaScriptSerializer();
    personData = jss.Deserialize<List<Emp>>(emp);
    // DO YOUR OPERATION ON LIST OBJECT

}