使用 AJAX 到 post 到 ASP.NET C# 控制器
Using AJAX to post to ASP.NET C# controller
我正在尝试将一个 JSON 对象(我从控制台复制了对象,我知道格式有点不对)从视图发送到 ASP.NET 中的控制器.
const obj = {
_405: {ratingID: '_8570', pts: '20'}
_2734: {ratingID: '_9791', pts: '20'}
_4041: {ratingID: 'blank', pts: '20'}
_5649: {ratingID: '_2544', pts: '20'}
_8025: {ratingID: '_4411', pts: '20'}
}
这是我的观点ajax:
$.ajax({
type: 'POST',
url: '@Url.Action("SendGrade", "Faculty")',
data: obj,
success: function(result) {
console.log(result)
}
})
这是我的控制器代码:
[HttpPost]
public ActionResult SendGrade(string rubric){
Console.WriteLine(rubric);
return null;
}
正在调用控制器,但 rubric 变量为空。我已经看过其他答案,并且在过去的两个小时里一直在尝试,但没有成功。我尝试添加不同的 ajax 属性,例如 conentType 和 dataType,但这没有效果。我还在对象上尝试了 JSON.stringify。此外,我尝试将 JObject 而不是字符串作为控制器函数中的类型,但这会引发 500 错误。任何帮助将不胜感激。我正在使用 ASP.NET 5.
asp.net 控制器具有将输入数据反序列化为对象的默认行为。您输入的 obj
不是字符串,它是您尝试在控制器中使用字符串映射的对象。
您需要创建一个 class 类似于您的输入结构。我已经创建了一个示例代码供您参考。
输入对象
var obj = [
{ ratingID: '_8570', pts: '20' },
{ ratingID: '_9791', pts: '20' },
{ ratingID: 'blank', pts: '20' },
{ ratingID: '_2544', pts: '20' },
{ ratingID: '_4411', pts: '20' }
];
此输入匹配 Class
public class Rubric
{
public string RatingId { get; set; }
public int Pts { get; set; }
}
控制器
[HttpPost]
public IActionResult Index([FromBody]List<Rubric> rubric)
{
Console.WriteLine(rubric);
return NoContent();
}
Javascript 提交代码
function send() {
$.ajax({
type: 'POST',
url: '@Url.Action("Index", "Email")',
contentType: "application/json",
data: JSON.stringify(obj) ,
success: function(result) {
console.log(result);
}
})
}
此代码仅供您参考,可为您提供解决问题的思路。
您正在通过 AJAX 发送一个对象。因此,在控制器操作方法中,您不能像(此处)public ActionResult SendGrade(string rubric)
那样传递 string 变量。因为您正在将对象发送到操作方法。你应该像下面这样创建一个 class :
public class Rubric
{
public string ratingId { get; set; }
public string pts { get; set; } // as you are passing pts as string
}
并且通过这样做,现在您可以将此 class 作为 Action Method 的参数传递,如下所示:
public ActionResult SendGrade(Rubric object)
现在,最后一个更改是,您应该编写 AJAX 的 data 参数,如下所示:
$.ajax({
type: 'POST',
url: '@Url.Action("SendGrade", "Faculty")',
data: {object : obj}, // the only change you should do in AJAX, as naming rule denotes and you are collecting 'object' in action method.
success: function(result) {
console.log(result)
}
})
通过这样做,您应该在控制器操作方法中获取值。
注意:我们在action方法中声明的变量传递时,必须与AJAX数据参数相同。这就是为什么 data : { object : obj } 写成 AJAX.
我正在尝试将一个 JSON 对象(我从控制台复制了对象,我知道格式有点不对)从视图发送到 ASP.NET 中的控制器.
const obj = {
_405: {ratingID: '_8570', pts: '20'}
_2734: {ratingID: '_9791', pts: '20'}
_4041: {ratingID: 'blank', pts: '20'}
_5649: {ratingID: '_2544', pts: '20'}
_8025: {ratingID: '_4411', pts: '20'}
}
这是我的观点ajax:
$.ajax({
type: 'POST',
url: '@Url.Action("SendGrade", "Faculty")',
data: obj,
success: function(result) {
console.log(result)
}
})
这是我的控制器代码:
[HttpPost]
public ActionResult SendGrade(string rubric){
Console.WriteLine(rubric);
return null;
}
正在调用控制器,但 rubric 变量为空。我已经看过其他答案,并且在过去的两个小时里一直在尝试,但没有成功。我尝试添加不同的 ajax 属性,例如 conentType 和 dataType,但这没有效果。我还在对象上尝试了 JSON.stringify。此外,我尝试将 JObject 而不是字符串作为控制器函数中的类型,但这会引发 500 错误。任何帮助将不胜感激。我正在使用 ASP.NET 5.
asp.net 控制器具有将输入数据反序列化为对象的默认行为。您输入的 obj
不是字符串,它是您尝试在控制器中使用字符串映射的对象。
您需要创建一个 class 类似于您的输入结构。我已经创建了一个示例代码供您参考。
输入对象
var obj = [
{ ratingID: '_8570', pts: '20' },
{ ratingID: '_9791', pts: '20' },
{ ratingID: 'blank', pts: '20' },
{ ratingID: '_2544', pts: '20' },
{ ratingID: '_4411', pts: '20' }
];
此输入匹配 Class
public class Rubric
{
public string RatingId { get; set; }
public int Pts { get; set; }
}
控制器
[HttpPost]
public IActionResult Index([FromBody]List<Rubric> rubric)
{
Console.WriteLine(rubric);
return NoContent();
}
Javascript 提交代码
function send() {
$.ajax({
type: 'POST',
url: '@Url.Action("Index", "Email")',
contentType: "application/json",
data: JSON.stringify(obj) ,
success: function(result) {
console.log(result);
}
})
}
此代码仅供您参考,可为您提供解决问题的思路。
您正在通过 AJAX 发送一个对象。因此,在控制器操作方法中,您不能像(此处)public ActionResult SendGrade(string rubric)
那样传递 string 变量。因为您正在将对象发送到操作方法。你应该像下面这样创建一个 class :
public class Rubric
{
public string ratingId { get; set; }
public string pts { get; set; } // as you are passing pts as string
}
并且通过这样做,现在您可以将此 class 作为 Action Method 的参数传递,如下所示:
public ActionResult SendGrade(Rubric object)
现在,最后一个更改是,您应该编写 AJAX 的 data 参数,如下所示:
$.ajax({
type: 'POST',
url: '@Url.Action("SendGrade", "Faculty")',
data: {object : obj}, // the only change you should do in AJAX, as naming rule denotes and you are collecting 'object' in action method.
success: function(result) {
console.log(result)
}
})
通过这样做,您应该在控制器操作方法中获取值。
注意:我们在action方法中声明的变量传递时,必须与AJAX数据参数相同。这就是为什么 data : { object : obj } 写成 AJAX.