为什么JQuery将null数组传递给MVC控制器而不是字符串数组?

时间:2017-01-25 10:33:08

标签: jquery arrays asp.net-mvc

好的,所以我的问题是双管齐下的。我试图从选定的行中检索特定的字符串值到JQuery数组:

<script>
var finalCSG=[]; 
$('.checkbox').change(function () {
        var csg = [];
        var checkedRows = $('.checkbox:checked'); 
        $.each(checkedRows, function (index, item) 
        { 
            var row = $(this).closest('tr');
            csg.push(row.find('.connote').text());
        })
        finalCsg = csg;
    });
</script>

我的第一个问题:数组'finalCsg'的内容应该是简单的字母数字字符串,但是它们包含许多前导和尾随空格(当我使用console.log来检查它们时)。我该如何解决这个问题?

现在,第二个也是更紧迫的问题。我尝试将此数组传递给我的MVC控制器(单击按钮),代码如下:

var url = '@Url.Action("Assign", "TransactionHistory")';
    document.getElementById("AssignButton").onclick = function () { myFunction() };
    function myFunction() {

        $('#myDiv').load(url, { csgList: finalCsg })
    }

'TransactionHistory'是我的控制器名称。即使在这里,变量csgList也包含正确的数组元素(使用我之前描述的那些空格,当我用console.log检查时)。但我的控制器只获得一个空字符串。控制器的定义如下:

    [HttpPost]
    public ActionResult Assign(List<string> csgList)
    { 
        return Content("Hi");
    }

我最初尝试使用string [] csgList作为参数,然后尝试使用List,但它总是从JQuery获取一个空值(或者我猜的是空字符串)(返回语句只是为了测试,现在并不是很有意义)。有些帖子提到了“传统”关键字的使用,但我主要不是前端开发人员(我在工作中为某人工作,有严格的截止日期)所以我无法使用它来达到正确的效果。

任何输入都会非常有益。

1 个答案:

答案 0 :(得分:2)

由于您传递了一组简单值,因此您可以使用traditional: true ajax选项正确绑定到List<string> csgList

var url = '@Url.Action("Assign", "TransactionHistory")';
var element = $('#myDiv');
$.ajax({
    url: url,
    type: 'POST',
    traditional: true,
    data: { csgList: finalCsg },
    success: function (response) {
        element.html(response);
    }
});

另一种方法是stringify数据并设置contentType选项(如果您的数组包含对象而不是简单值,则需要此替代方法)

$.ajax({
    url: url,
    type: 'POST',
    data: JSON.stringify({ csgList: finalCsg }),
    contentType: "application/json; charset=utf-8",
    success: function (response) {
        element.html(response);
    }
});