繁体   English   中英

ASP.NET MVC 上传图片到 model

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM