【发布时间】:2020-08-02 00:07:32
【问题描述】:
我正在尝试将位于 javascript 变量中的 Base64 图像字符串传递给控制器。到目前为止,我一直没有成功。我已经确认字符串不是未定义的,我认为问题出在我使用的 AJAX 上。我的问题是,如何正确地将数据发送到控制器?
查看
<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 的 3rd 方插件来上传图像。该脚本查找指定的输入标签(在本例中为 ImageFile),并为用户创建一个上传图片的接口。
无论如何,我设法使用这个 java 脚本从这个插件中获取 base 64 图像到一个变量中:
...
// 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; }
}
...
最终的目标是将这些上传的图片放到指定的文件夹中,但在此之前,我必须将数据传入才能使用。我会很感激我能得到的任何帮助。感谢您的浏览,希望我正确地遵守了发帖规则。
【问题讨论】:
-
如果您将字符串传递给您的 api 方法,该方法接受 ImageModel 类型的对象,那么这将不起作用。
-
谢谢你,将参数更改为字符串类型并将 FromForm 更改为 FromBody 就可以了。
标签: javascript ajax asp.net-mvc asp.net-core