我将数组传递给mvc控制器,但是我发现了null

时间:2015-08-06 10:38:58

标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller

****这是jquery脚本。从表中获取值并将其传递给对象****

$(document).ready(function () {
                var table = $('#example').DataTable();

                $('#example tbody').on('click', 'tr', function () {
                    $(this).toggleClass('selected');
                });

                $('#button').click(function () {
                    debugger;
                    var Data = [];
                    var TableData = $.map(table.rows('.selected').data(), function (item) {


                        var objData = {};
                        objData.Name = item[0]
                        objData.Position = item[1]
                        objData.Office = item[2]
                        objData.Age = item[3]
                        objData.Startdate = item[4]
                        objData.Salary = item[5]

                        var objparsed = $.makeArray(objData);

                        for (var x in objparsed) {
                            Data.push(objparsed[x]);
                        }

                    });

                    alert(Data);
                    $.ajax({
                        data: JSON.stringify({ 'Data': Data }),
                        url: '/Table/SelectedTable',
                        dataType: "json",
                        type: 'POST',`enter code here`
                        contentType: "application/json; charset=utf-8",


                    });
                });
            });

******这是她的返回值为null的contoler代码** **我正在将数组传递给mvc控制器但是我正在测试null ****

 [HttpPost]
                public ActionResult SelectedTable(string[] Data)
                {

                    Models.SelectedTable select = new Models.SelectedTable();
                    select.Name = Data[0];
                    select.Position = Data[1];
                    select.Office = Data[2];
                    select.Age = Data[3];
                    select.Startdate = Data[4];
                    select.Salary = Data[5];
                    return View(Data);
                }

6 个答案:

答案 0 :(得分:1)

试试这种方式

var Data=[{Name : item[0],Position : item[1],Office : item[2],Age : item[3],Startdate : item[4],Salary : item[5]}];

<强>的Ajax

 jQuery.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: /Table/SelectedTable,
            processData: false,
            async: false,
            data: JSON.stringify('Data':Data),
            dataType: "json",
            success: function (data) {
                returnData = data
            },
            error: function (data) {
                alert(data)
            }
        });

控制器

 public JsonResult SelectedTable(List<SelectedTable> Data)
        {

//your code 
 return Json(new { Status = "Success" }, JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

对于Post控制器操作上的输入变量,数据不是一个非常好的名称,但暂时不要忽略它。

从您发布的JS代码中,Data是一个复杂的对象,而不是您在帖子操作中声明的字符串。这将导致MVC模型绑定使Data为null,因为给定的表单数据与操作签名不匹配。

如果要将其更改为List,那么如果在客户端正确序列化数据数组,则MVC模型绑定将起作用。

答案 2 :(得分:0)

您的Data变量是函数的本地变量:

$('#button').click(function () {
    var Data = [];
});

将其置于函数之外使其成为全局:

var Data = [];
$('#button').click(function () {
});

此外,首先对数据进行Stringify,然后使用AJAX。

var ajaxData=JSON.stringify(Data);
$.ajax({
             data: ajaxData,
             url: '/Table/SelectedTable',
             dataType: "json",
             type: 'POST',`enter code here`
             contentType: "application/json; charset=utf-8",


       });

答案 3 :(得分:0)

In Ajax Call

data: { Data: objparsed } 

In Controller
  

var objparsed = JSON.parse(objData); //无需添加为数组

Finally you can deserialize the Data as model objects
  

SelectedTable(字符串数据)

private Target target = new Target() {
    @Override
    public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from)
{
        new Thread(new Runnable() {
            @Override
            public void run() {

                File file = new File(
                        Environment.getExternalStorageDirectory().getPath()
                                + ImageName + ."jpg");//+ "/saved.jpg");
                try {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
                    ostream.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {}

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {}
};

答案 4 :(得分:0)

因为意外串联两次而遇到了这个问题......

var peopleArray = new Array();
peopleArray[0] = { FirstName: "John", LastName: "Doe" };
var myPayload = JSON.stringify({ people: peopleArray }); // this is the mistake
$.ajax({
            url: "/myController/myMethod",
            type: "POST",
            traditional: true,
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(myPayload),
            contentType: 'application/json',
        }).done(function (result) {
            ...
        });
});

请注意,有效负载已按字母顺序排列两次。改变这个:

var myPayload = JSON.stringify({ people: peopleArray });

到此:

var myPayload = { people: peopleArray };

解决了这个问题。

答案 5 :(得分:-1)

昨天我遇到了同样的问题。而不是stringify我自己创建了一个字符串,我喜欢的格式。然后使用Ajax

data: { Data: myString },

在控制器端:public ActionResult SelectedTable(string Data)

然后解析数据以获取我需要的值。

希望这有帮助