Ajax 将空对象发布到 mvc 控制器

Posted

技术标签:

【中文标题】Ajax 将空对象发布到 mvc 控制器【英文标题】:Ajax posting null object to the mvc controller 【发布时间】:2021-11-07 22:03:35 【问题描述】:

我试图将一个对象传递给 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; 
    


我的 javascript 代码

        var url = input.value;
        var imageData = '';
        var finalUrL = '';
        console.log(input.files[0])
        var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
        if (input.files && input.files[0] && (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');
        
    

【问题讨论】:

您“通过网络”得到什么?您可以在网络选项卡中的 F12 浏览器屏幕中看到 不,我不是@Gandalf 在网络选项卡中,我可以看到请求负载是合法对象 我假设“合法对象”是指 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;

【讨论】:

以上是关于Ajax 将空对象发布到 mvc 控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 和 ajax 将 json 对象发布到 mvc 控制器

.net core 3.1将ajax对象列表发布到MVC控制器没有数据到达

jQuery AJAX 发布到 MVC 控制器对象——请求显示为空

如何将 Json 对象从 ajax 传递到 spring mvc 控制器?

如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器

使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法