Ajax отправляет нулевой объект в контроллер mvc

#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;