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”})的方式开始的哇!您的第一个解决方案非常有效:)。谢谢你!亲爱的马蒂,谢谢你的回复。萨瓦内尔滕的解决方案奏效了。然而,我也很想学习你的方法。你能给我指一本解释它的教程吗?