[英]ASP.NET MVC upload images to a model
我在 ASP.NET MVC 中添加图像时遇到了一点问题。 我在我的根文件夹中创建了一个名为/Images/Brands/
的文件夹,我想在其中保存我的品牌模型的图像。
这是我的Brand
model:
namespace AspProjectBootstrap.Models
{
public class Brand
{
public int ID { get; set; }
[Required]
public String Name { get; set; }
[Required]
public String Description { get; set; }
public virtual ICollection<Product> Products { get; set; }
public String ImagePath { get; set; }
[NotMapped]
public HttpPostedFileBase ImageFile { get; set; }
}
}
我看到有些人将模型 class 中的路径保存为ImagePath
,然后在需要时从ImagesPath
获取图像的完整路径。
这是我创建的品牌 function:
public ActionResult Create(Brand brand)
{
string filename = Path.GetFileName(brand.ImageFile.FileName);
filename = DateTime.Now.ToString("yymmssfff") + filename+".png";
brand.ImagePath = "~/Images/Brands/" + filename;
filename = Path.Combine(Server.MapPath("~/Images"), filename);
brand.ImageFile.SaveAs(filename);
if (ModelState.IsValid)
{
db.Brands.Add(brand);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(brand);
}
但我得到一个错误。
如果您有任何想法如何解决此问题,或任何其他方法来完成此任务。
先感谢您。
错误是:
创建Create.cshtml
视图是:
<div class="form-group">
@Html.LabelFor(model => model.ImagePath, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" name="ImageFile" />
</div>
</div>
您的 Create 方法正在接受序列化的 model,虽然 model 可以包含文件数据,但它可能无法解析名称:
这应该有效:
@Html.TextBoxFor(model => model.ImageFile, new { type="file" })
这将确保生成的输入被命名,以便 MVC 在表单提交或序列化 model 时识别它。
如果这不起作用,接下来要检查的是在string filename = Path.GetFileName(brand.ImageFile.FileName);
上放置一个断点。 并检查哪个部分是#null。 是ImageFile
null 还是ImageFile.FileName
? 您还应该验证您的代码以检查空值,以防可以在不提供文件的情况下提交表单。
问题出在 Create.cshtml 视图中:
@using (Html.BeginForm())
解决方案是:
@using (Html.BeginForm("Create","Brands", FormMethod.Post, new { enctype = "multipart/form-data" }))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.