【发布时间】:2019-11-08 17:35:54
【问题描述】:
使用 AJAX 将包含数组值的对象发送到 MVC 控制器操作。断点显示 Action 已到达,但接收字符串数组的对象为空。
对 Asp.net MVC Web Api 的调用是使用 AJAX 进行的。创建对象,然后使用 JSON.Stringify。 MVC Action 参数对象设置为从 AJAX 调用接收值。我试过 [HttpPost] 属性以及 [Route("api/Controller")]。我也尝试过在 javascript 中将对象存储在另一个对象中。然后使用 JSON.stringify 然后将其设置为 ajax 'data' 参数。
JavaScript 代码
//var data = {
// Apimethod: null,
// Employees: [],
// Type: null
//};
var data = [];
//var jsonData = JSON.stringify(data);
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
url: "api/{controller}/" + data.Apimethod,
data: { employees: data }
//traditional: true
}).done(function (response) {
$('#modelmsg').empty();
$('#modelmsg').append(response);
return returnguid = response;
}).fail(function (response) {
console.log('Error: ' + response);
});
WebApiConfig
config.Routes.MapHttpRoute(
name: "Name",
routeTemplate: "api/{controller}/{action}/{employees}",
defaults: new { action = "{name}", employees = RouteParameter.Optional }
);
MVC Controller
```c#
[Route("api/{controller}/{employees}")]
public IHttpActionResult InsertEmployeesIntoRDLTable(EmployeeList employees)
{
//Code Here
return Json(response);
}
类对象EmployeeList
public class EmployeeList
{
public string Apimethod { get; set; }
public string[] Employees { get; set; }
public string Type { get; set; }
}
从 ajax 调用产生的 http 链接收到错误: 没有 MediaTypeFormatter 可用于从媒体类型为“application/octet-stream”的内容中读取“String[]”类型的对象。
总体预期结果是从 AJAX 调用接收参数。但是 Object 类保持为空。
更新
如下所示,Fetch 似乎有效。只是不确定为什么。
所以我发现 fetch 可以完成这项工作。我不是 100% 确定为什么,但确实如此。
fetch(url, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'credentials': 'include'
},
body: jsonData
})
.then(response => {
return response.json();
})
.then(response => {
//code
})
.catch(function (e) {
//code
});
【问题讨论】:
标签: javascript asp.net ajax api model-view-controller