c# - 在 Asp.Net core 中上传图片失败
问题描述
我正在尝试上传单个图像。但问题是当我上传图片时,我发现 null (我已调试)。这是我的代码:
[HttpPost]
public async Task <IActionResult> Create(Image products, IFormFile image)
{
if (ModelState.IsValid)
{
if (image != null)
{
var name1 = Path.Combine(_he.WebRootPath + "/Images", Path.GetFileName(image.FileName));
var stream2 = new FileStream(name1, FileMode.Create);
await image.CopyToAsync(stream2);
products.ImageC = "Images/" + image.FileName;
}
if (image == null)
{
products.ImageC = "Images/NoImageFound.jpg";
}
_db.Images.Add(products);
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View(products);
}
_Create.cshtml
<form asp-action="Create" method="post" enctype="multipart/form-data">
<div class="p-4 rounded border">
<div asp-validation-summary="ModelOnly" class="text-danger">
</div>
<div class="form-group row">
<div class="col-5">
<p class="text-bold mb-2">Image</p>
<input asp-for="ImageC" class="" type="file" />
</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-danger form-control" value="Submit" />
</div>
</div>
</form>
//Image.cs (Model)
public class Image
{
public int Id { get; set; }
public string ImageC { get; set; }
}
当我键入提交按钮时:-
然后我调试了我的代码并发现了这个问题:-
我不明白为什么我发现这个空引用?我将如何上传我的图片?我还是一个初学者,请帮助。
解决方案
我假设在 HttpGet 操作中传递给视图的模型是 Image 类的空实例,这就是 HttpPost 操作返回的模型。
因此,我们可以简单地在类本身中声明一个 IFormFile 属性,并让引擎使用来自type="file"控件的数据填充该属性。
此时,HttpPost Create 方法中不需要 IFormFile 类型的参数。
public class Image
{
public int Id { get; set; }
public IFormFile ImageC { get; set; }
}
然后 HttpPost Create 方法中所需的所有其他更改都是此更改的结果。
但是,您的视图和数据库似乎具有相同的模型。在这个简单的案例中,您可以继续忘记 ViewModels 的概念,但最好是为了您未来的努力考虑模型和视图模型之间的这种分离。UI 应该对用于与数据库交互的模型一无所知。
可以在此处找到有关此主题的更多信息ASP.NET MVC 模型与 ViewModel
推荐阅读
- java - 我的倒计时只减少了 1 并且没有更多,这是为什么呢?
- python-3.x - 使用 np.where 或 loc 更新 pandas 数据框的多列
- bash - 如何在 bash 中编写“rostopic echo”?
- java - 如果输出为0,如何打印数组?
- python - 将 Amazon Polly 的声音下载为 mp3 文件的网站
- python - 在 Pandas 中删除行时如何忽略 \N 转义?
- php - PHP + Apache:获取应用程序基本 URL 路径的通用方法
- css - 如何反转元素部分的颜色?
- node.js - 如何在我的 Express 路由器中使用两个 MongoDB 集合?
- python - raise ValueError("无法将 {0!r} 转换为 Excel".format(value))