为啥在我的 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 响应页面?
为啥我的 jQuery .ajax() 路由的 .done() 方法没有在我的 NodeJS、Express 和 Mongoose 项目中触发?