在通过ajax将数组传递给控制器​​时获取错误404

时间:2017-02-10 12:20:45

标签: ajax asp.net-mvc

我在视图中有一个这样的循环,它会生成学生姓名列表

<Table id="your_table">
<thead>
<tr>
    <th>name</th>
    <th>grade</th>
    <th>remove</th>
</tr>
</thead>
<tbody>
    @foreach (string item in Model)
    {
        <tr>
            <td id="td_name" style="border-left: thin">@item</td>
            <td><input type="text" id="txtGrade_@item" onclick="" style="width: 40px;border-left: thin" /></td>
            <td><input type="checkbox" id="chkStudent_@item" value="@item" /></td>
        </tr>

    }
</tbody>

我使用下面的脚本获取每行第一个单元格的文本:

$('#btnDone')
          .click(function() {
        //get studentslist
        function getFirstCellTextList(tableElement) {
            if (tableElement instanceof jQuery) {
                // Create an array
                var textList = [];
                // Iterate over each table row
                tableElement.find('tbody tr').each(function () {
                    // Get the first cells's text and push it inside the array
                    var row = $(this);
                    if (row.children('td').length > 0) {
                        textList.push(row.children('td').eq(0).text());
                    }
                });
                return textList;
            }
            return null;
        }
        // Get the array
        var lststudents = getFirstCellTextList($('#your_table'));
        var result = [];
        $(lststudents).each(function(index, item) {
            result.push(item);
        });

       alert(result);
       $.ajax('/TeacherPages/GetGrades/' + result).done(function () {
           alert("done");
       });
    });
问题是。当我想将创建的数组发送到控制器时,我得到错误404.这个数组有问题。因为当我手动为数组添加值时,ajax可以正常工作

这是我的行动:

[AttributeRouting.Web.Mvc.GET("/TeacherPages/GetGrades/{result}")]
    public PartialViewResult GetGrades(string[] result)
    {
        return PartialView();
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

您不能只是将javascript数组附加到您的网址。它只是将数组中的值转换为逗号分隔的字符串,而您需要生成一个

的URL
/TeacherPages/GetGrades?result=someValue&result=anotherValue&result=etc...

将脚本更改为

$.ajax({
    url: '@Url.Action("GetGrades", "TeacherPages")', // don't hardcode your url's
    type: 'POST',
    traditional: true,
    data: { result: result },
    success: function (response) {
        ....
    }
});

作为旁注,你的getFirstCellTextList()函数正在返回你想要的数组,并且从它创建另一个相同的数组毫无意义。你只需要

var result = getFirstCellTextList($('#your_table'));