Asp.net 在编辑张贴方法中上载新图像
我有一个视图,我们可以看到现有的图像,我想上传新的图像到现有的,所以图像上传到文件夹和信息的图像存储在数据库中,我也使用视图模型 我的视图模型类Asp.net 在编辑张贴方法中上载新图像,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个视图,我们可以看到现有的图像,我想上传新的图像到现有的,所以图像上传到文件夹和信息的图像存储在数据库中,我也使用视图模型 我的视图模型类 public class FurnitureVM { ... public IEnumerable<HttpPostedFileBase> SecondaryFiles { get; set; } public List<ImageVM> SecondaryImages { get; set
public class FurnitureVM
{
...
public IEnumerable<HttpPostedFileBase> SecondaryFiles { get; set; }
public List<ImageVM> SecondaryImages { get; set; }
}
public class ImageVM
{
public int? Id { get; set; }
public string Path { get; set; }
public string DisplayName { get; set; }
public bool IsMainImage { get; set; }
}
公共类家具虚拟机
{
...
公共IEnumerable辅助文件{get;set;}
公共列表第二映像{get;set;}
}
公共类ImageVM
{
公共int?Id{get;set;}
公共字符串路径{get;set;}
公共字符串DisplayName{get;set;}
公共bool IsMainImage{get;set;}
}
我的编辑方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(FurnitureVM model)
{
// Save the files
foreach (HttpPostedFileBase file in model.SecondaryFiles)
{
FurnitureImages images = new FurnitureImages();
string displayName = file.FileName;
string extension = Path.GetExtension(displayName);
string fileName = string.Format("{0}{1}", Guid.NewGuid(), extension);
var path = "~/Upload/" + fileName;
file.SaveAs(Server.MapPath(path));
model.SecondaryImages = new List<ImageVM> { new ImageVM { DisplayName = displayName , Path = path } };
}
// Update secondary images
IEnumerable<ImageVM> newImages = model.SecondaryImages.Where(x => x.Id == null);
foreach (ImageVM image in newImages)
{
FurnitureImages images = new FurnitureImages
{
DisplayName = image.DisplayName,
Path = image.Path ,
IsMainImage = false
};
furniture.Images.Add(images);
}
ViewBag.CategoryId = new SelectList(db.Categories, "CategoryId", "Name", furniture.CategoryId);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共行动结果编辑(FurnitureVM模型)
{
//保存文件
foreach(model.secondary文件中的HttpPostedFileBase文件)
{
FurnitureImages=新的FurnitureImages();
字符串displayName=file.FileName;
字符串扩展名=Path.GetExtension(displayName);
字符串文件名=string.Format(“{0}{1}”,Guid.NewGuid(),扩展名);
var path=“~/Upload/”+文件名;
file.SaveAs(Server.MapPath(path));
model.SecondaryImages=新列表{new ImageVM{DisplayName=DisplayName,Path=Path}};
}
//更新次映像
IEnumerable newImages=model.SecondaryImages.Where(x=>x.Id==null);
foreach(新图像中的ImageVM图像)
{
FurnitureImages=新的FurnitureImages
{
DisplayName=image.DisplayName,
Path=image.Path,
IsMainImage=false
};
家具。图像。添加(图像);
}
ViewBag.CategoryId=新的选择列表(db.Categories,“CategoryId”,“Name”,furniture.CategoryId);
}
因此,图像的信息写入db good,但当我第二次进入编辑视图时,在
字符串displayName=file.FileName;行中出现异常“对象引用未设置为对象的实例”
代码>我知道我必须创建FurnitureImages的实例,对吗?好吧,那我怎么写代码,像这样的images.DisplayName=file.Filename
etc??我的foreach循环是否在我更新的地方?感谢您在foreach
循环中添加检查的可能重复-foreach(model.SecondaryFiles中的HttpPostedFileBase文件){if(file!=null&&file.ContentLength>0){…
@StephenMuecke hmmm很好,现在它可以工作了……我想:)