在带有图片的页面上编辑详细信息

时间:2014-12-10 11:19:19

标签: asp.net asp.net-mvc asp.net-mvc-5

我有一个带有图片和其他几个字段的页面。上传图片工作正常。如果用户想要编辑并放置不同的图片,那也可以正常工作。当用户编辑记录中的其他字段(图像字段除外)时,会出现此问题。保存后,图像消失。

这是我的控制器

public ActionResult Edit([Bind(Include = "GlobalMaterialId,Length,Picture")] MetalStock metalStock, HttpPostedFileBase ImageFile)
    {
        if (ModelState.IsValid)
        {

            if (ImageFile != null)
            {
                string pic = System.IO.Path.GetFileName(ImageFile.FileName);

                metalStock.ImagePath = pic;

                using (MemoryStream ms = new MemoryStream())
                {
                    ImageFile.InputStream.CopyTo(ms);
                    metalStock.Picture = ms.GetBuffer();

                }

            }                             

            m_db.Entry(metalStock).State = EntityState.Modified;           

            m_db.SaveChanges();

           return RedirectToAction("Index");
        }

        return View(metalStock);
    }

这是视图的图像上传位

<输入名称=" ImageFile"类型='文件' />

据我所知,当我编辑一个字段并保存时,传递给控制器​​的ImageFile是空的并且会产生问题。我尝试了一些其他的东西,比如试图从记录中获取图片并将其重新分配给对象等。他们没有工作。请帮忙。

2 个答案:

答案 0 :(得分:0)

我猜你的控制器会死,因为它寻找一个HttpPostedFile并且没有得到它。 您可以在行动声明

中使其可以为空
public ActionResult Edit([Bind(Include = "GlobalMaterialId,Length,Picture")] MetalStock metalStock, HttpPostedFileBase ImageFile = null)

或者根本不在控制器中声明它并从请求中提取它:

var Image = Request.Files["ImageFile"]

答案 1 :(得分:0)

您可以将现有图像文件存储在隐藏字段中作为base64字符串,并在后期操作检查中查看HttpPostedFileBase是否为空(他们没有选择不同的图像)。如果是,将base64字符串转换回字节数组并将其分配给metalStock.Picture属性。

这就是我过去处理这种情况的方式。您需要在viewmodel上创建另一个属性来保存此base64字符串。假设您的视图不直接绑定到您的实体,而是视图模型,则这是有益的。