JQUERY ajax 将 JSON 发布到 C# MVC 控制器,但传入的数据为空
Posted
技术标签:
【中文标题】JQUERY ajax 将 JSON 发布到 C# MVC 控制器,但传入的数据为空【英文标题】:JQUERY ajax posts JSON to C# MVC controller, but the incoming data is null 【发布时间】:2021-02-20 04:22:21 【问题描述】:我有一个奇怪的问题。我有一个包含两个类的 C# 数据结构:
public class AddQuestionModel2
public int? QuestionID get; set;
public string QuestionString get; set;
public int? TrueAnswer get; set;
public QuestionType Type get; set;
public IEnumerable<AddQuestionModelAnswer> Answers get; set;
public class AddQuestionModelAnswer
public int? ID get; set;
public string AnswerString get; set;
public bool? IsRight get; set;
public int? Order get; set;
public enum QuestionType
SingleSelect,
MultiSelect,
OrderAnswers,
FillingGap,
ExampleRequired,
TrueOrFalse
javascript 生成 javascript 对象(对于数据结构来说看起来不错),并且 JSON.stringify 转换为以下 json 字符串:
"QuestionString":"<p>Question 1</p>","TrueAnswer":"0","Type":"0","Answers":["AnswerString":"<p>Answer 1</p>","IsRight":"0","AnswerString":"<p>Answer 2</p>","IsRight":"0","AnswerString":"<p>Answer 3</p>","IsRight":"0","AnswerString":"<p>Answer 4</p>","IsRight":"0"]
json数据由以下jquery命令发送:
$.ajax(
url: "/Questions/Add",
method: "POST",
async: true,
dataType: "json",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (e)
if (e.Success)
document.location = "/Questions";
,
error: function (e)
var i;
for (i in e)
console.log(e[i]);
);
在C#端,我有以下方法来接收post数据:
[HttpPost]
public async Task<string> Add([FromBody] AddQuestionModel2 q)
var ctx = this.HttpContext;
JsonResultModel res = new JsonResultModel();
参数“q”始终为空。如果我展开 ctx (HttpContext),Request.Form 数据会抛出 System.InvalidOperationException。
如果您知道可能出了什么问题,有什么办法吗? 最大的问题是我无法调试 HttpContext 中发生的事情以及它抛出异常的原因。
提前致谢! 嘉柏
【问题讨论】:
我添加了 QuestionType 的定义。它是一个枚举,所以在客户端它是作为数字管理的。 IsRight 是类中的布尔值,在客户端它是 1 或 0。 【参考方案1】:在您的 ajax 代码中尝试使用 data:data,而不是 data:JSON.stringify(data)。 JSON.stringify() 方法将 JavaScript 对象或值转换为 JSON 字符串,但 ajax 数据需要 JavaScript 对象。在布尔字段中使用“true”或“false”代替 0 或 1 来尝试的另一件事。
在邮递员中一切正常。
【讨论】:
我尝试使用数据:数据。结果相同。也尝试了真/假。结果相同。 你是对的。 C# 不能将 0 和 1 转换为 false 和 true。我不得不使用纯 javascript true 和 false。由于字符串“true”和“false”也不被接受。我还必须将 Type 的值从字符串转换为整数,因为 C# 无法自动将“0”转换为 0。以上是关于JQUERY ajax 将 JSON 发布到 C# MVC 控制器,但传入的数据为空的主要内容,如果未能解决你的问题,请参考以下文章
将数据传递到处理程序的 Jquery ajax 不起作用(Asp.net、C#、Jquery)
通过jquery ajax将json对象传递给webmethod
如何在 c# ASP.Net 中使用有效的 JSON 输出创建 JSON WebService 并使用 JQuery/Ajax 进行查询