[英]Failed to upload an image in 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; }
}
当我键入提交按钮时:-
然后我调试了我的代码并发现了这个问题:-
我不明白为什么我找到这个 null 参考? 我将如何上传我的图片? 我还是一个初学者,请帮助。
我假设在 HttpGet 操作中传递给视图的 model 是 Image class 的空实例,这就是 HttpPost 操作返回的 model。
所以我们可以简单地在 class 本身中声明一个 IFormFile 属性,然后让引擎用type="file"控件中的数据填充该属性。
此时,HttpPost Create 方法中不需要 IFormFile 类型的参数。
public class Image
{
public int Id { get; set; }
public IFormFile ImageC { get; set; }
}
那么 HttpPost Create 方法中所需的所有其他更改都是此更改的结果。
但是,您的视图和数据库似乎具有相同的 model。 在这个简单的情况下,您可以提前 go 并忘记 ViewModels 的概念,但最好是为了您未来的努力考虑模型和视图模型之间的这种分离。 UI 应该对用于与数据库交互的模型一无所知。
可以在此处找到有关此主题的更多信息ASP.NET MVC Model 与 ViewModel
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.