我正在嘗試從視圖向 ASP.NET 中的控制器發送一個 JSON 物件(我從控制臺復制了物件,并且我知道格式有點偏離)。
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。
uj5u.com熱心網友回復:
asp.net 控制器具有將輸入資料反序列化為物件的默認行為。您輸入obj的不是字串,而是您嘗試在控制器中使用字串映射的物件。
您需要創建一個類似于您的輸入結構的類。我創建了一個示例代碼供您參考。
輸入物件
var obj = [
{ ratingID: '_8570', pts: '20' },
{ ratingID: '_9791', pts: '20' },
{ ratingID: 'blank', pts: '20' },
{ ratingID: '_2544', pts: '20' },
{ ratingID: '_4411', pts: '20' }
];
此輸入的匹配類
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);
}
})
}
此代碼僅供您參考,它將為您提供解決問題的想法。
uj5u.com熱心網友回復:
您正在通過 AJAX 發送一個物件。因此,在控制器操作方法中,您不能像 (here) 那樣傳遞字串變數public ActionResult SendGrade(string rubric)。因為您正在將物件發送到操作方法。您應該創建一個如下所示的類:
public class Rubric
{
public string ratingId { get; set; }
public string pts { get; set; } // as you are passing pts as string
}
并且通過這樣做,現在您可以將此類作為 Action Method 的引數傳遞,如下所示:
public ActionResult SendGrade(Rubric object)
現在,最后一項更改是,您應該撰寫AJAX 的資料引數,如下所示:
$.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 撰寫的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426816.html
標籤:C# json asp.net-mvc http-post asp.net-ajax
下一篇:遍歷JSON陣列并回傳元素的子集
