为什么我在 HttpPost 方法 Ajax 调用中在控制器上得到一个空参数?

Why do I get an empty parameter on the controller in my HttpPost method Ajax call?

我有一个视图在运行时向其添加无序列表和列表项,然后循环获取输入的值,将信息推送到一个对象,然后对我的 Ajax 调用方法。

我总是在控制器上得到一个空参数,console.log(assetWeighJsonDetail) 显示输入的内容,所以我确保我没有传递空对象(见下图):

// 客户端脚本:

var assetSerialNumber = "";
var weight = 0;
var assetWeighJsonDetail = [];

$(".ul-asset-weigh").each(function () {

    var classNameSelected = this.id;

    $("." + classNameSelected).each(function () {
        assetSerialNumber = $(this).attr('id');
        weight = $(this).val();
        assetWeighJsonDetail.push({
            OriginID: classNameSelected,
            AssetSerialNumber: assetSerialNumber,
            Weight: weight
        });
    });
});

console.log(assetWeighJsonDetail);

$.ajax({
    url: "/AssetWeigh/SaveAssetWeigh",
    data: JSON.stringify({assetWeighJsonDetail}),
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    traditional: true,
    success: function (response) {
        if (response) {
            alert("success");
        }
        else {
            alert("fail");
        }
    },
    error: function (exception) {
    }
});

// 控制台:

// 控制器方法:

[HttpPost]
public ActionResult SaveAssetWeigh(List<AssetWeighJsonDetail> assetWeighJsonDetail)      
{
   bool success = false;

   success = assetWeighJsonDetail != null && assetWeighJsonDetail.Count > 0;

   return Json(success);
}

// 方法的 class 列表参数:

public class AssetWeighJsonDetail
{
    public int OriginID { get; set; }
    public string AssetSerialNumber { get; set; }
    public decimal Weight { get; set; }
}

您应该尝试使用 $.post 如果使用 $.ajax 我也遇到过同样的问题并且无法正常工作,只是切换到 $.post 就可以了。

$.post( "/AssetWeigh/SaveAssetWeigh", parameters, function() {
  alert( "success" );
})
  .done(function() {
 alert( "second success" );
  })
  .fail(function() {
 alert( "error" );
})
 .always(function() {
 alert( "finished" );
 });

我在 phone 上,无法输入所有内容,稍后我会尝试从我的计算机更新