He estado buscando por un tiempo y nada me ayudó a resolver este problema. No sé qué está pasando, solía enviar información al controlador a través de un objeto de datos de AJAX usando JQuery, pero en este caso, el parámetro llega nulo. Mi solicitud se ve así (creé una función basada en el clic del botón):
Método Js en la página Razor
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); } }); }Controlador
[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 .: Cuando trato de usar datos de consulta en url, funciona. Espero que algunos de ustedes hayan enfrentado este problema alguna vez :)
Cree una clase modelo para que se reciba el objeto esperado.
public class SearchStudiesModel { public string SearchString { get; set; } } Cambie la firma del método del controlador para esperar recibir SearchStudiesModel y aplique [FromBody] para obtener el valor del cuerpo de la solicitud.
[HttpPost] public async Task<IActionResult> SearchStudies([FromBody]SearchStudiesModel model) { if (String.IsNullOrWhiteSpace(model.SearchString)) return BadRequest("Search something!"); ... }Resultado de la depuración