我有一页图片和其他几个字段。上传图片工作fine.If用户想要编辑和放置不同的图片,这也很好。当用户编辑记录中的不同字段(图像字段除外)时,会发生此问题。保存后,图像消失。
这是我的控制器
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);
}
以下是上传视图的图片
<输入name="ImageFile“类型=‘file’/>
我知道,当我编辑一个字段并保存时,传递给控制器的ImageFile是空的,这就产生了问题。我尝试过其他一些事情,比如尝试从记录中获取图片并将其重新分配给对象等。请帮帮忙。
发布于 2014-12-10 11:52:44
我想您的控制器会死掉,因为它寻找一个HttpPostedFile,而没有得到一个。您可以在操作的声明中使其为空。
public ActionResult Edit([Bind(Include = "GlobalMaterialId,Length,Picture")] MetalStock metalStock, HttpPostedFileBase ImageFile = null)
或者根本不要在控制器中声明它,并从请求中获取它:
var Image = Request.Files["ImageFile"]
发布于 2014-12-10 12:21:01
您可以将现有的图像文件作为base64字符串存储在隐藏字段中,并在post操作检查中查看HttpPostedFileBase是否为null (他们没有选择不同的图像)。如果是,则将base64字符串转换回字节数组,并将其分配给metalStock.Picture属性。
过去我就是这样处理这种情况的。您需要在视图模型上创建另一个属性来保存这个base64字符串。假设您的视图不是直接绑定到您的实体,而是一个视图模型,这是有益的。
https://stackoverflow.com/questions/27399693
复制相似问题