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很好,现在它可以工作了……我想:)