使用ajax将字符串数组传递给mvc控制器

Passing a string array to mvc controllers using ajax

本文关键字:mvc 控制器 数组 ajax 字符串 使用      更新时间:2023-09-30

我需要将多选中的字符串列表传递给控制器。虽然这个要求在我看来很简单,但在过去的一个小时里,我一直在为此伤透脑筋。我对此做了相当的研究,但未能成功。

下面是我的Javascript代码。请忽略评论。我成功地获取了多选中的项目列表。当我进行ajax调用时,我得到错误"Object reference not set a instance of a Object

function submitForm() {
    var selected = $('#selectedTasks option').map(function(){ 
        return this.value 
    }).get()
    var postData = { selectedTasks : selected } //corrected as suggested
    //selectedTasks = JSON.stringify({ 'selectedTasks': selected });
    alert(postData);
    $.ajax({
        type: "POST",
        //contentType: 'application/json; charset=utf-8',
        url: '@Url.Action("AssignTasks", "MonthEndApp")',
        dataType: 'json',
        data: postData,
        traditional: true,
        success: function (data) {                
            alert("Success");
        },
        error: function (xhr) {                    
            alert(xhr.responseText);
        } 
    });
}

MonthEndAppController.cs

[HttpPost]
public void AssignTasks(List<String> selectedTasks)
{
    //do something
}

有人能指引我到底哪里出了问题吗?有人能告诉我怎么了吗?

编辑:根据Rory先生的建议,我对java脚本进行了更改。现在Java脚本部分工作得非常好。但是在发出ajax请求时,控制器不会被调用。如果打给管制员的电话出了问题,有人能帮我吗?

您尝试过使用string[]而不是List<String>吗?

AssignTasks操作所需的参数称为selectedTasks,而不是values:

var postData = { selectedTasks: selected };

还要注意,在JS中调试任何东西时,您应该始终使用console.log()而不是alert(),因为后者将所有类型强制为字符串,这意味着您看不到实际值的真实表示。