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

Asp.net 在带有图片的页面上编辑详细信息,asp.net,asp.net-mvc,asp.net-mvc-5,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我有一个带有图片和一些其他字段的页面。上传图片很好。如果用户想要编辑并放置不同的图片,也可以。当用户编辑记录中的其他字段(图像字段除外)时,会出现此问题。保存后,图像将消失 这是我的控制器 public ActionResult Edit([Bind(Include = "GlobalMaterialId,Length,Picture")] MetalStock metalStock, HttpPostedFileBase ImageFile) { if (ModelSt

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

这是我的控制器

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是空的,这就产生了问题。我尝试了一些其他的事情,比如尝试从记录中获取图片,并将其重新分配给对象等等,但没有一个成功。请帮忙

我猜您的控制器可能会死机,因为它在查找HttpPostedFile,但没有找到。 您可以在您的操作声明中使其为空

public ActionResult Edit([Bind(Include = "GlobalMaterialId,Length,Picture")] MetalStock metalStock, HttpPostedFileBase ImageFile = null)
或者根本不在控制器中声明它并从请求中提取它:

var Image = Request.Files["ImageFile"]

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


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

图像标记是否在表单中?是的。很抱歉表单是以@using(Html.BeginForm(“Edit”、“MetalStocks”、FormMethod.Post、new{enctype=“multipart/formdata”})的方式开始的哇!您的第一个解决方案非常有效:)。谢谢你!亲爱的马蒂,谢谢你的回复。萨瓦内尔滕的解决方案奏效了。然而,我也很想学习你的方法。你能给我指一本解释它的教程吗?