AJAX Post to ASP.NET MVC Controller操作方法-空参数

时间:2018-08-20 16:25:14

标签: c# ajax asp.net-mvc

我想用AJAX发布一个包含一些数据的字符串数组到我的控制器。这只是纯文本,我的控制器始终接收空参数。我知道我不应该字符串化,因为我不使用模型或视图模型。

我搜索了其他问题,但大多数都涉及表格并使用viewmodel属性。

这是我的代码:

控制器

[HttpPost]
public ActionResult FirstAjax(string[] listValues)
{
    //TODO
    return Json("Reached the controller", JsonRequestBehavior.AllowGet);
}

我添加了JSON返回值,以检查我是否确实在按下控制器,并且在视图中收到了消息。

AJAX POST

var listValues = [];
listElements.each(function (index, element) {
    listValues.push(element.innerText);
});

var serviceURL = '/Products/FirstAjax';

$.ajax({
    type: "POST",
    url: serviceURL,
    data: listValues,
    success: successFunc,
    error: errorFunc
});

function successFunc(data, status) {
    alert(data);
}

function errorFunc() {
    alert('error');
}

由于我的列表可通过拖放进行排序,因此在单击按钮时,listValues的文本值将按<li>项的顺序填充。

查看

<div class="demo">

  <ul id="sortable">
    <li class="ui-state-default">Cat</li>
    <li class="ui-state-default">Dog</li>
    <li class="ui-state-default">Tiger</li>
  </ul>
  <button type="button" onclick="display_array();">Ajax Post!</button>

</div><!-- End demo -->

3 个答案:

答案 0 :(得分:0)

将ajax选项更改为:

$.ajax({
    ...
    data: {listValues: listValues},
    ...
});

原因是:服务器期望发布的对象/查询字符串与参数命名相同。 data会在查询字符串中转换为listValues=...&otherParams=...。如果您在未指定参数名称的情况下发布数组,则JQuery无法正确映射它们

答案 1 :(得分:0)

编写您的Ajax POST方法,如下所示:

$(document).ready(function(){

    var listValues = [];
    listElements.each(function (index, element) {
          listValues.push(element.innerText);
    });

    var serviceURL = '/Products/FirstAjax';

    $.ajax({
       type: "POST",
       url: serviceURL,
       data: {listValues: listValues},
       contentType: 'application/json'
       success: successFunc,
       error: errorFunc
    });

    function successFunc(data, status) {
       alert(data);
    }

    function errorFunc() {
       alert('error');
    }
});

希望这可以解决您的问题。

答案 2 :(得分:0)

您需要将contentType作为application/json,并使用JSON.stringify将JavaScript对象转换为JSON字符串。

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: serviceURL,
    data: JSON.stringify({ listValues: listValues}),
    success: successFunc,
    error: errorFunc
});