Javascript 在ASP.NET MVC5中将DOM数组发布到控制器

Javascript 在ASP.NET MVC5中将DOM数组发布到控制器,javascript,jquery,asp.net,ajax,asp.net-mvc,Javascript,Jquery,Asp.net,Ajax,Asp.net Mvc,我在获取HTML DOM数组并使用ajax调用将其传递给控制器时遇到问题 这就是post发生的方式(单击按钮): 这是应处理此post的控制器代码: [HttpPost] public ActionResult SaveMap(string mapData) { return View(); } 因此,这里还没有真正发生任何事情;我放了一个断点,看看我是否能击中它,但我不能 以下是如何填充阵列的示例: for (var col = 1; col <= cols + 1; col+

我在获取HTML DOM数组并使用ajax调用将其传递给控制器时遇到问题

这就是post发生的方式(单击按钮):

这是应处理此post的控制器代码:

[HttpPost]
public ActionResult SaveMap(string mapData)
{
    return View();
}
因此,这里还没有真正发生任何事情;我放了一个断点,看看我是否能击中它,但我不能

以下是如何填充阵列的示例:

for (var col = 1; col <= cols + 1; col++) {
    for (var row = 1; row <= rows + 1; row++) {
        var isPrintElement = row != 1 && col != 1;
        var elementColor = isPrintElement ? '#ffffff' : '#000000';
        this.children.push({
            color: elementColor,
            color_cache: elementColor,
            content: row == 1 ? col - 1 : col == 1 ? row - 1 : "",
            isPrint: isPrintElement,
            mask: "n/a",
            modifier1: new Modifier(""),
            modifier2: new Modifier(""),
            modifier3: new Modifier(""),
            modifier4: new Modifier(""),
            modifier5: new Modifier(""),
            modifier6: new Modifier(""),
            hasModifier: function () {
                return (this.modifier1.value != "" ||
                    this.modifier2.value != "" ||
                    this.modifier3.value != "" ||
                    this.modifier4.value != "" ||
                    this.modifier5.value != "" ||
                    this.modifier6.value != "");
            },
            width: width,
            height: height,
            top: row * (height + this.PRINT_MARGIN),
            left: col * (width + this.PRINT_MARGIN)
        });
    }
}

我不是专家,但我认为这是因为没有发生模型绑定,并且您的控制器需要的是字符串,而不是json对象

将对象绑定到模型,并将其传递回控制器

此外,我认为如果您删除:

contentType: "application/json; charset=utf-8",

现在它将以字符串的形式发布,并且应该会击中您的控制器。

感谢Robert McKee的帮助

诀窍是在map对象上实现一个toJSON()方法

这是我的基本实现(还有很多工作要做;我只是将map对象的前两个属性打包成一个JSON对象,最后所有属性都必须是JSON结构的一部分):


您是否尝试调试控制器并获取有关500错误原因的更多信息?我尝试在“SaveMap”方法内的唯一代码行中放置断点,但断点从未命中。有什么建议吗?将
数据:JSON.stringify(map.children),
更改为
数据:{mapData:JSON.stringify(map.children)},
@RobertMcKee我试过了,但仍然得到相同的内部服务器错误。如果发送JSON,为什么
传统:true
?您是否检查了实际请求,以查看发送的内容是否符合预期?这里没有太多的故障排除信息
POST http://localhost:xxxxx/WaferMapper/SaveMap 500 (Internal Server Error)
contentType: "application/json; charset=utf-8",
var WaferMap = function (canvas) {
    ....
    ....
}
WaferMap.prototype = {
    ....
    ....
    toJSON: function () {
        var json = "[";
        for (var i = 0; i < this.children.length; i++) {
            var element = this.children[i];
            json += "{" +
                "\"color:\"" + element.color + "\"," +
                "\"color_cache:\"" + element.color_cache + "\"},";
        }
        return json.substring(0, json.length - 1) + "];"
    }
}
function onSaveMapClicked() {
    $.ajax({
        type: "POST",
        url: "/WaferMapper/SaveMap",
        contentType: "application/json",
        data: {mapData:JSON.stringify(map)},
        success: function (data) { },
        error: function (response) {
            alert(response);
        }
    });
 }