首页 > 解决方案 > AJAX 发布到 ASP.NET MVC 控制器操作方法 - 空参数

问题描述

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

我搜索了其他问题,但大多数是指表单并使用视图模型属性。

这是我的代码:

控制器

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

我添加了 JSON 返回以检查我是否真的在点击控制器,并在我的视图中收到消息。

阿贾克斯邮报

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 -->

标签: c#ajaxasp.net-mvc

解决方案


将您的 ajax 选项更改为:

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

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


推荐阅读