【问题标题】:AJAX Post to ASP.NET MVC Controller action method - Null parametersAJAX 发布到 ASP.NET MVC 控制器操作方法 - 空参数
【发布时间】:2019-01-26 19:55:51
【问题描述】:

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

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

这是我的代码:

控制器

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

【问题讨论】:

  • 在你的 ajax 中,对于你的数据,试试这个 - “data : {listValues: listValues}”。大括号中的第一个参数是控制器中的参数,第二个是您的 javascript 数组。
  • 感谢@Daniaal,成功了!
  • 我应该把它作为答案!哦,很高兴它起作用了朋友。

标签: c# ajax asp.net-mvc


【解决方案1】:

如下编写你的 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】:

    您需要将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
    });
    

    【讨论】:

      【解决方案3】:

      将您的 ajax 选项更改为:

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

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

      【讨论】:

        猜你喜欢
        • 2016-05-28
        • 2017-07-20
        • 2019-03-30
        • 1970-01-01
        • 2011-05-06
        • 2014-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多