为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?

Posted

技术标签:

【中文标题】为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?【英文标题】:Why do I get an empty parameter on the controller in my HttpPost method Ajax call?为什么在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空? 【发布时间】:2020-10-27 00:16:13 【问题描述】:

我有一个视图,它在运行时添加一个无序列表和列表项,然后我循环获取输入的值,将信息推送到一个对象,并对我的方法进行 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);

// 方法的类List参数:

public class AssetWeighJsonDetail

    public int OriginID  get; set; 
    public string AssetSerialNumber  get; set; 
    public decimal Weight  get; set; 

【问题讨论】:

试试不带大括号data: JSON.stringify(assetWeighJsonDetail), @Musa,我已经尝试过了,但不起作用。奇怪的是,即使我尝试传递像 data: testStr: "Test-Str" 这样的单个值并将方法相应地更改为: public ActionResult SaveAssetWeigh(string testStr) 参数为空。 对于测试字符串 test 你是否将内容类型从 json 更改为? 是的,我做了:数据:“Test-Str”,类型:“POST”,数据类型:“text”,contentType:“text/plain”, 我唯一能想到的另一件事是以 url 编码的表单数据发送 json data: assetWeighJsonDetail: JSON.stringify(assetWeighJsonDetail),contentType:'application/x-www-form-urlencoded', 【参考方案1】:

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

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

我在手机上,无法全部输入,稍后我会尝试从我的电脑上更新

【讨论】:

成功了!不需要 JSON.stringify,该方法采用参数没有问题。你是男人,谢谢!

以上是关于为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?的主要内容,如果未能解决你的问题,请参考以下文章

长时间运行的 ASP.NET MVC 核心控制器 HTTPPost 方法超时

为啥我在 ajax post 调用后得到 json 响应页面?

如何对控制器操作进行 ajax 调用

为啥我的 jQuery .ajax() 路由的 .done() 方法没有在我的 NodeJS、Express 和 Mongoose 项目中触发?

为啥我的简单 ajax 帖子没有调用 c# web 方法?

为啥我的 AngularJS ajax 自动触发,即使我没有调用它?