我正在向MVC控制器发出AJAX POST请求,但数据以null
的形式通过。我不确定为什么。
$(document).ready(function() {
$("#btnSaveCustomer").click(function() {
debugger;
var data = {
_DcLink: "1",
_Account: "Test",
_Name: "TestName",
_Title: "Mr",
_Init: "T"
}
$.ajax({
method: "POST",
url: '/Customer/SaveCustomer',
data: JSON.stringify(data),
success: function() {
debugger;
console.log(data)
alert("Success")
},
error: function() {
alert("Error")
}
});
})
public ActionResult SaveCustomer(string data)
{
using (var ms = new MemoryStream(Encoding.UTF32.GetBytes(data)))
{
// Deserialization from JSON
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Customer));
Customer serializeddata = (Customer)deserializer.ReadObject(ms);
}
return Json(new { Success = true });
}
无论我如何尝试序列化数据,始终都是null
。我相信AJAX POST方法执行不正确
我正在使用虚拟数据来解决问题。
代码在控制器中的MemoryStream
处遇到一个断点-声明数据为null
。
System.ArgumentNullException:'未将字符串引用设置为String的实例。 参数名称:s'
任何帮助表示赞赏
答案 0 :(得分:3)
这是因为ModelBinder期望在JSON中命名为data
的属性,但您并未发送该属性;所有属性都在根对象中。如果您要绑定到模型,那会很好用,但是由于您不需要,所以需要稍微修改JS中的数据结构,以达到以下目的:
var data = {
data: {
_DcLink: "1",
_Account: "Test",
_Name: "TestName",
_Title: "Mr",
_Init: "T"
}
}
答案 1 :(得分:1)
像这样改变;
data: {data : JSON.stringify(data)},
答案 2 :(得分:0)
有相同的问题。 AJAX调用失败。如果我从控制器中删除[FromBody],则ajax调用成功,但是数据为空。我正在使用.NET Core 3.1和剃须刀页面
<script>
$(document).ready(function () {
var data = { "name": "John Doe" }
$.ajax({
url: "/membership/tester/",
type: "POST",
data: JSON.stringify(data),
dataType: "json",
contentType: "application/json; charset=utf-8",
headers: {
RequestVerificationToken:
$('input:hidden[name="__RequestVerificationToken"]').val()
},
success: function (data) {
alert('Survey submitted successfully');
},
error: function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 500) {
alert('Internal error: ' + jqXHR.responseText);
} else {
alert('Unexpected error.' + jqXHR.status);
}
}
});
});
</script>
这是控制器代码
[Route("membership/tester")]
[HttpPost]
public ActionResult Test([FromBody] string somedata)
{
var data = somedata;
return Json(data);
}
答案 3 :(得分:-2)
$(document).ready(function() {
$("#btnSaveCustomer").click(function() {
debugger;
var data = {
_DcLink: "1",
_Account: "Test",
_Name: "TestName",
_Title: "Mr",
_Init: "T"
}
$.ajax({
method: "POST",
url: '/Customer/SaveCustomer',
data: JSON.stringify(data),
success: function(data) {
debugger;
console.log(data)
alert("Success")
},
error: function() {
alert("Error")
}
});
})