Я пытаюсь передать контроллеру строку изображения Base64, содержащуюся в переменной javascript. Пока у меня ничего не получалось. Я подтвердил, что строка не является неопределенной, и я думаю, что проблема заключается в AJAX, которое я использую. Мой вопрос: как правильно отправить данные на контроллер?
View
<div class="col-md-4">
<form asp-action="Create" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div class="form-group">
<input id="ImageFile" accept="image/*">
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" id="su" />
</div>
</form>
</div>
Чтобы объяснить, я использую сторонний плагин для загрузки изображений, который называется slim cropper. Этот скрипт ищет указанный входной тег (в данном случае ImageFile) и создает интерфейс для пользователей для загрузки изображений.
В любом случае мне удалось получить изображение base 64 из этого плагина в переменную используя этот сценарий java:
...
// get a reference to the Create button
var button = document.querySelector('#submit');
var pic
// listen to clicks on the submit button
button.addEventListener('click', function () {
alert("working")
pic = $('.slim-area .slim-result img').attr('src');
});
...
После этого я попытался использовать AJAX, чтобы передать эти данные в контроллер
...
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Image/Create",
data: JSON.stringify(pic),
dataType: "json",
success: function (response, data) {
alert(response.someValue);
},
error: function (err) {
}
});
...
Когда я запускаю код, всегда приходит модель, которую я настроил для приема данных в контроллере назад как null. Вот очень простой код контроллера
...
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([FromForm] ImageModel imageModel)
{
return Json(new { someValue = "It's ok" });
}
...
и Модель
...
public class ImageModel
{
[Key]
public int ImageId { get; set; }
[Column (TypeName="nvarchar(50)")]
[DisplayName("Image Name")]
public string ImageName { get; set; }
[Column(TypeName = "nvarchar(100)")]
public string Title { get; set; }
[NotMapped]
public byte[] pic { get; set; }
}
...
Конечная цель - поместить эти загруженные изображения в указанную папку, но до того, как это произойдет, я должен передать данные для работы. Буду признателен за любую помощь, которую я могу получить в этом. Спасибо, что посмотрели, и я надеюсь, что правильно выполнил правила публикации.