ASP.NET MVC 不接受控制器上的 ajax 数据对象
ASP.NET MVC do not accept ajax data object on controller
我已经搜索了一段时间,但没有任何方法可以帮助我解决这个问题。我不知道发生了什么,我曾经使用 JQuery 通过来自 AJAX 的数据对象向控制器发送信息,但在这种情况下,参数到达 null。我的请求看起来像这样(我创建了一个基于按钮点击的函数):
Razor 页面上的 Js 方法
const searchStudy = () => {
let searchString = JSON.stringify({"searchString": $("#searchString").val()});
console.log(searchString)
$.ajax({
url: "@Url.Action("SearchStudies","Studies")",
method: "POST",
processData: false,
data: searchString,
contentType: "application/json; charset=UTF-8",
dataType: "html",
success: function(response) {
console.log(response)
$("#dataContainer").html(response);
}
});
}
控制器
[HttpPost]
public async Task<IActionResult> SearchStudies(string searchString)
{
if (String.IsNullOrWhiteSpace(searchString))
return BadRequest("Search something!");
var studies = await _studyService.GetSearchStudies(searchString);
return PartialView("~/Views/Studies/_Studies.cshtml", studies);
}
Ps.: 当我尝试在 url 上使用查询数据时,它起作用了。希望你们中的一些人曾经遇到过这个问题:)
为预期要接收的对象创建一个模型class。
public class SearchStudiesModel
{
public string SearchString { get; set; }
}
更改控制器方法签名以期望接收 SearchStudiesModel
并应用 [FromBody]
从请求正文中获取值。
[HttpPost]
public async Task<IActionResult> SearchStudies([FromBody]SearchStudiesModel model)
{
if (String.IsNullOrWhiteSpace(model.SearchString))
return BadRequest("Search something!");
...
}
Debugging result
我已经搜索了一段时间,但没有任何方法可以帮助我解决这个问题。我不知道发生了什么,我曾经使用 JQuery 通过来自 AJAX 的数据对象向控制器发送信息,但在这种情况下,参数到达 null。我的请求看起来像这样(我创建了一个基于按钮点击的函数):
Razor 页面上的 Js 方法
const searchStudy = () => {
let searchString = JSON.stringify({"searchString": $("#searchString").val()});
console.log(searchString)
$.ajax({
url: "@Url.Action("SearchStudies","Studies")",
method: "POST",
processData: false,
data: searchString,
contentType: "application/json; charset=UTF-8",
dataType: "html",
success: function(response) {
console.log(response)
$("#dataContainer").html(response);
}
});
}
控制器
[HttpPost]
public async Task<IActionResult> SearchStudies(string searchString)
{
if (String.IsNullOrWhiteSpace(searchString))
return BadRequest("Search something!");
var studies = await _studyService.GetSearchStudies(searchString);
return PartialView("~/Views/Studies/_Studies.cshtml", studies);
}
Ps.: 当我尝试在 url 上使用查询数据时,它起作用了。希望你们中的一些人曾经遇到过这个问题:)
为预期要接收的对象创建一个模型class。
public class SearchStudiesModel
{
public string SearchString { get; set; }
}
更改控制器方法签名以期望接收 SearchStudiesModel
并应用 [FromBody]
从请求正文中获取值。
[HttpPost]
public async Task<IActionResult> SearchStudies([FromBody]SearchStudiesModel model)
{
if (String.IsNullOrWhiteSpace(model.SearchString))
return BadRequest("Search something!");
...
}
Debugging result