javascript - 将 json 传递到 MVC Controller

标签 javascript json ajax asp.net-mvc

我看过很多关于这个主题的帖子,尽管应用解决方案对我来说不起作用,而且我现在很困惑。 Mb我错过了什么?

请考虑一下我是 .js 方面的菜鸟。

因此,我使用此 JS 从动态创建的表单元素中获取值,并尝试发布它:

编辑 12:21:我得到了这个脚本,它应该将表单中的每个元素解析为类似于 json 的自定义数组。但我仍然得到空引用。知道如何获得它吗?

 var getValues = function (myForm) {
        var array = [];
    var parser;

    $("formElement").each( function (i, elem) {

            parser.empty()
            parser = {
                Id: $(elem,"#Id ").val(),
                someOption: $(elem, "#someOption ").val(),
                someText: $(elem, "#someText ").val(),
                someNumber: $(elem, "#someNumber  ").val()
            }
            array.push(parser);

        });

    console.log(array);


    $.ajax({
        type: "POST",
        url: 'angus',
        traditional: true,
        data:  {json: array },
        success: function (data) {
            $("#getData").empty();
            $("#getData").append(array);
        }
    });            
    };

我在日志中得到了这个: (像 i、i+1、i+2、i+3 这样的索引对象与 View 模型匹配 - 这是正确的吗?我对这些原型(prototype)和函数有复杂的感觉 - 它是什么?) enter image description here

在我的 Controller 操作中,我得到 null 异常:

 [HttpPost]
        public ActionResult angus(IEnumerable<TrashViewModel> json)
        {

            return View(json.ToList());
        }

我创建了我的 View 模型:

  [Serializable]
public class TrashViewModel
{
    public int Id { get; set; }
    public string someOption { get; set; }
    public string someText { get; set; }
    public string someNumber { get; set; }

}

我的表单 HTML 属性名称与 viemodel 类的名称相匹配。

编辑: html:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div ng-app="formExample" ng-controller="ExampleController">

    <button class="btn btn-primary" ng-controller="addRow" ng-click="addLine()">Dodaj przycisk</button>

    <form novalidate class="simple-form">
        <div class="here">
            <div class="formElement row">

                  <input type="hidden" name="Id" value="1"/>
                <div class="col-md-2">
                    <select name="someOption" class="optns form-group col-md-12" ng-model="user.class">
                        <option selected value="1"> Rodzaj... </option>
                        <option value="test">2</option>
                        <option value="2">test</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        @*tutaj beda dodane opcje*@
                    </select>
                </div>
                <div class="col-md-1">
                    <input name="someNumber" class="form-group col-md-12" type="number" ng-model="user.number" value="" text="Ilość..." /><br />
                </div>
                <div class="col-md-9">
                    <input name="someText" class="form-group col-md-12" type="text" ng-model="user.text" value="" text="Uwagi..." /><br />
                </div>
            </div>
        </div>
        <input type="button" value="Reset" />
        <input type="submit" value="Save" />
    </form>
</div>

附加html:

 var strVar = "";
            strVar += "<div class=\"formElement row\">";
            strVar += "                  <input type=\"hidden\" name=\"Id\" value=\" "+ $scope.counter +"\"\/>";
            strVar += "                <div class=\"col-md-2\">";
            strVar += "                    <select name=\"someOption\" class=\"optns form-group col-md-12\" ng-model=\"user.class\">";
            strVar += "                        <option selected value=\"1\"> Rodzaj... <\/option>";
            strVar += "                        <option value=\"test\">2<\/option>";
            strVar += "                        <option value=\"2\">test<\/option>";
            strVar += "                        <option value=\"2\">2<\/option>";
            strVar += "                        <option value=\"3\">3<\/option>";
            strVar += "                        @*tutaj beda dodane opcje*@";
            strVar += "                    <\/select>";
            strVar += "                <\/div>";
            strVar += "                <div class=\"col-md-1\">";
            strVar += "                    <input name=\"someNumber\" class=\"form-group col-md-12\" type=\"number\" ng-model=\"user.number\" value=\"\" text=\"Ilość...\" \/><br \/>";
            strVar += "                <\/div>";
            strVar += "                <div class=\"col-md-9\">";
            strVar += "                    <input name=\"someText\" class=\"form-group col-md-12\" type=\"text\" ng-model=\"user.text\" value=\"\" text=\"Uwagi...\" \/><br \/>";
            strVar += "                <\/div>";
            strVar += "            <\/div>";

我最终得到了 null 异常,根据其他帖子的建议,这是因为 viemodel 类与序列化对象不匹配。现在不知道该怎么办。

谢谢!

最佳答案

为了 POST 数组,您需要对数据进行字符串化并设置 contentType 选项。你的ajax代码需要是

$.ajax({
    type: 'POST',
    url: '@Url.Action("angus")', // do not hard code url's
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ model: array }), 
    success: function (data) {

和 Controller

[HttpPost]
public ActionResult angus(IEnumerable<TrashViewModel> model)

关于javascript - 将 json 传递到 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39265053/

相关文章:

c++ - 将 OpenCV Mat 转换为数组(可能是 NSArray)

javascript - 简单的 SQL 到 PHP 数字递增动画 [Jquery]

ajax - Ext.Direct VS Ext.Ajax

javascript - JsPDF-Autotable空白行使用带有对象的数组

javascript - crypto.js "ciphertext"是什么意思

javascript - 如何为 highcharts 创建 Json 格式的数据

jquery - 如何将 .ajax() responseText 设置为变量

javascript - 无法让 console.log() 在 popup.js 中工作

javascript - HTML5 Canvas drawImage 比例bug iOS

java - Jackson Mapper 未反序列化 JSON -(无法读取 JSON : Already had POJO for id (java. lang.Integer))