【问题标题】:I am Passing array to the mvc controler but iam geting null我正在将数组传递给 mvc 控制器,但我得到了 null
【发布时间】:2015-10-29 11:23:39
【问题描述】:

****这里是 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** **我正在将数组传递给 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);
                }

【问题讨论】:

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


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

      对于 Post 控制器操作中的输入变量来说,Data 不是一个很好的名称,但我们暂时忽略它。

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

      如果您要将其更改为 List,则如果您正确序列化客户端中的 Data 数组,则 MVC 模型绑定将起作用。

      【讨论】:

        【解决方案3】:

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

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

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

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

        另外,先将数据字符串化,然后使用 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",
        
        
               });
        

        【讨论】:

          【解决方案4】:
          I would suggest to pass string value to parameter in controller.
          

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

          In Ajax Call
          
          data: { Data: objparsed } 
          
          In Controller
          

          SelectedTable(字符串数据)

          Finally you can deserialize the Data as model objects
          

          【讨论】:

            【解决方案5】:

            我在意外串化两次时遇到了这个问题...

            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 };
            

            解决了问题。

            【讨论】:

              【解决方案6】:

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

              data: { Data: myString },
              

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

              然后解析 Data 后得到我需要的值。

              希望对你有帮助

              【讨论】:

              • 当你遵守定义的约定后,当 MVC 模型绑定会自动执行时,为什么要手动解析。您的解决方案可能有效,但不是最佳的
              • @ John Mc 但实际上它的所有创建都是一个字符串。为什么不通过规定该字符串的格式来让自己变得更容易。特别是如果您正在使用嵌套数组对数组进行字符串化。这将被额外的括号和 dbl 引号弄乱,这可能需要更长的时间才能弄清楚如何从中检索值。我不介意被纠正,但你能解释一下主要的好处是什么,因为在专业领域内,时间至关重要?
              • 如果您使用模型绑定,那么您不必担心传递模型的有效负载,因此只要有效负载不会影响性能,额外的括号等就无关紧要。如果您使用模型绑定,那么您将获得一个完全实例化和填充的对象,该对象在表单中表示,因此可以直接使用它而无需解析任何内容。这是我认为 MVC 最棒的地方之一
              • 没有问题,希望你检查一下,发现它和我一样有用!
              • @John Mc 不会说谎,我有点卡住了。我会尝试更多地破解它,但我可能需要向你寻求一点帮助
              猜你喜欢
              • 2018-03-31
              • 1970-01-01
              • 2015-09-20
              • 2013-09-05
              • 2016-11-17
              • 1970-01-01
              • 2017-05-08
              • 2017-01-26
              相关资源
              最近更新 更多