我正在尝试将图像更新到数据库,我将以下内容定义为属性模型(受数据库限制):
public byte[] AvatarImage { get; set; }
然后,我创建了另一个将值存储在ViewModel
中的属性:
public IFormFile AvatarImage { get; set; }
此步骤在文档here中也有描述。 在我的表格旁边,我添加了以下html:
<div class="form-group text-center col-lg-12">
<img src="@Model.AvatarImage" class="avatar img-circle" alt="avatar" />
<h6>@Localizer["UploadNewAvatar"] ...</h6>
<input type="file" class="form-control" id="avatarUrl" asp-for="@Model.AvatarImages" />
</div>
当我提交表单时,属性AvatarImage
甚至是null
。但是我不明白为什么会发生这种情况,因为所有其他表单属性都正确地计价了
答案 0 :(得分:1)
听起来像您缺少表单enctype。
确保您拥有:
<form enctype="multipart/form-data">
... inputs
<form>
答案 1 :(得分:0)
您下面的<input type="file">
元素分配似乎是错误的,因为它使用了@Model
指令,该指令输出AvatarImages
属性的值(并且该属性在viewmodel类中不存在):>
<input type="file" class="form-control" id="avatarUrl" asp-for="@Model.AvatarImages" />
正确的方法只是使用下面的示例中的属性名称,因为asp-for="PropertyName"
等效于HTML帮助器中的model => model.PropertyName
(假设您将@model
指令设置为viewmodel类):
<input type="file" class="form-control" asp-for="AvatarImage" />
也不要忘记在enctype="multipart/form-data"
标签助手中指定<form>
属性:
<form asp-controller="ControllerName" asp-action="ActionName" method="post" enctype="multipart/form-data">
<!-- form contents here -->
</form>
答案 2 :(得分:0)
首先将enctype =“ multipart / form-data”添加到表格中;
然后,检查您的@model,两种情况:
1。直接使用Model,因为图像是字节数组类型,所以在提交过程中需要将文件类型转换为byte []。
2。或者您可以使用ViewModel,然后在方法中将参数类型更改为viewmodel。