Нужно передать с разметки данные в контроллер. Вот сам контроллер:
public class MeatController : Controller
{
[HttpGet]
public async Task<IActionResult> Create()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Create([FromBody]CreateViewModel vm)
{
if(!ModelState.IsValid)
{
return BadRequest(new { responseMessage = "Invalida data" });
}
return Ok(new { responseMessage = "Success" });
}
}
Вот сам скрипт ajax:
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script>
$("#submitBtn").on('click', () => {
let data = {
name: $("#name").val(),
description: $("#description").val(),
price: $("#price").val(),
weight: $("#weight").val(),
type: $("#type").val(),
source: $("#source").val(),
};
let jsonData = JSON.stringify(data);
$.ajax({
url: '@Url.Action("Create", "Meat")',
method: 'post',
data: jsonData,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: () => {
alert("Success");
},
error: () => {
alert("Error");
},
});
});
</script>
Я пробовал дебагать сам скрипт, но jsonData имеет нормальный и адекватный вид. А вот в экшен модель заходить просто null.
Вот сама модель:
public class CreateViewModel
{
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public double Weight { get; set; }
public MeatTypes Type { get; set; }
public MeatSource Source { get; set; }
}
public class CreateValidator : AbstractValidator<CreateViewModel>
{
public CreateValidator()
{
RuleFor(x => x.Name).Length(3, 15).NotNull().NotEmpty();
RuleFor(x => x.Description).Length(4, 511).NotEmpty().NotNull();
RuleFor(x => x.Price);
RuleFor(x => x.Weight);
RuleFor(x => x.Type);
RuleFor(x => x.Source);
}
}
UPD: Добавил [IgnoreAntiforgeryToken] к экшену, не помогло
UPD2: Я узнал, что вся проблема в . Точнее, не в его наличии, а если я выбираю его значение и передаю через ajax. Имею в виду, что даже если элемент есть на разметке, но я не беру его значение, тогда всё проходит нормально. Но, если я пытаюсь выбрать из него установленное значение, у меня заходит просто null в экшен