将数据从ajax传递到asp.net core

13 浏览
0 Comments

将数据从ajax传递到asp.net core

我正在尝试从ajax传递对象到asp.net core\n以下是asp代码\n

[HttpPost]
public async Task AddOrUpdate([FromForm] LSPost lsPost, List files)
{
    return await Task.Run(() =>
    {
        try
        {
            JsonResult t = ImageUpload(files).Result as JsonResult;
            string[] fullFilePathsReturned = t.Value as string[];
            lsPost.Media = fullFilePathsReturned[0];
            lsPost.Update();
            return Ok();
        }
        catch (Exception ex)
        {
            return StatusCode(500);
        }
    });
}

\n以下是ajax调用\n

function UploadFile() {
    var lsPost = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(new LSPost()));
    lsPost.Title = $("#someText").val();
    console.log(lsPost);
    var fileData = new FormData();
    fileData.append("lsPost", lsPost);
    fileData.append("files", $("#someRandomID").get(0).files[0]);
    $.ajax({
        type: "POST",
        url: "/LSPostModel/AddOrUpdate",
        processData: false,
        contentType: false,
        data: fileData,
        success: function () {
        }
    });
}

\n参数\"files\"被传递,但\"lsPost\"没有。我尝试添加/删除[FromForm] / [FromBody]标签。我尝试将fileData.append的第一个参数与后端的参数名称匹配。我尝试将javascript对象名称与后端的参数名称匹配。什么都不起作用...

0
0 Comments

问题出现的原因是在使用ajax将数据传递给ASP.NET Core时,无法将复杂对象类型映射到后端。

解决方法之一是使用简单类型来映射多个参数。将formdata中的数据更改为基本类型值,并将action的参数更改为字符串类型。

另一个解决方法是将List<IFormFile>放入LSPost中。在这种情况下,可以使用LSPost对象接收formdata数据。

需要注意的是,formdata的项无法映射到后端的复杂对象类型。

当使用ajax将数据从前端传递给ASP.NET Core时,需要注意数据的类型以及后端参数的类型,以确保正确的数据映射。

0