#javascript #c# #asp.net-mvc
Вопрос:
Я пытаюсь передать объект контроллеру MVC, но в контроллере я получаю нулевые значения для объекта, который я передал через ajax.
Я вижу, что у моего объекта есть некоторые данные в представлении, но я не могу привязать их к контроллеру.
Контроллер
[HttpPost]
public ActionResult AddImage(ImageModel imageModel)
{
UploadRepo.saveImage(imageModel);
return null;
}
Модель
namespace Fileupload.Models
{
public class ImageModel
{
public int Id { get; set; }
public string ImageData { get; set; }
}
}
Мой Код Javscript
var url = input.value;
var imageData = '';
var finalUrL = '';
console.log(input.files[0])
var ext = url.substring(url.lastIndexOf('.') 1).toLowerCase();
if (input.files amp;amp; input.files[0] amp;amp; (ext == "gif" || ext == "png" || ext == "jpeg" || ext == "jpg")) {
finalUrL = await readAsDataURL(input.files[0])
imageData = finalUrL.replace(/^data:image/[a-z] ;base64,/, '').trim()
var obj = {
Id: 1,
ImageData: imageData
}
$.ajax({
url: '/Upload/AddImage',
type: "POST",
data: JSON.stringify(obj),
contentType: "application/json;",
success: function (data) {
//successMessage();
$("form")[0].reset();
},
error: function (xhr, textStatus, errorThrown) {
console.log("textstatus", textStatus, xhr)
// errorMessage();-
}
});
console.log("imagedata", myobj);
} else {
$('#img').attr('src', '/assets/no_preview.png');
}
}
Комментарии:
1. что ты получаешь «по проводу»? Вы можете увидеть на экране браузера F12 на вкладке сеть
2. Нет, я не @Гэндальф
3. На вкладке сеть я вижу, что полезная нагрузка запроса является законным объектом
4. Я предполагаю, что под «законным объектом» вы подразумеваете строку JSON, которая выглядит так, как вы ожидаете. И все же действие контроллера по-прежнему равно нулю, верно? Так что это не законно. Вы можете заменить параметр из ImageModel на
FormCollection
, а затем явно преобразовать вImageModel
и посмотреть, какую ошибку вы получите
Ответ №1:
Файл вложения в ASP.NET MVC должен быть типа HttpPostedFileBase. Итак, измените свойство данных изображения следующим образом, т. е.
public HttpPostedFileBase ImageData { get; set; }
затем в вашем методе [HttpPost] выполните следующие действия, чтобы получить данные из загруженного файла, т. е.
// Upload File data.
byte[] fileByteData = new byte[model.ImageData.InputStream.Length];
model.ImageData.InputStream.Read(fileByteData, 0, fileByteData.Length);
string fileContentType = model.ImageData.ContentType;