如何在 mvc c# 中保留旧图像文件

how to remain old image file in mvc c#

我是 .net 新手.. 刚开始我的 mvc c#..

我这里有问题..我正在尝试在插入徽标后更新它。如果我没有 select 图像文件,徽标位置(我仅将位置部分存储在数据库中)来自 "null"..

这里是控制器:

    public ActionResult Edit(payroll_Company payroll_company)
    {
        if (ModelState.IsValid)
        {
            HttpPostedFileBase txtUploadFile = Request.Files["txtUploadFile"];

            if (txtUploadFile != null && txtUploadFile.ContentLength > 0)
            {
                string logo = txtUploadFile.FileName;
                payroll_company.comp_logo = logo;

                var path = Path.Combine(Server.MapPath("~/Logo/"), logo);
                txtUploadFile.SaveAs(path);
            }
            else
            {
                //payroll_Company comp = db.payroll_Company.Find(payroll_company.comp_id);
                //payroll_company.comp_logo = comp.comp_logo;
            }

            db.Entry(payroll_company).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(payroll_company);
    }

这里的观点:

<div class="form-group">
   <label class="control-label col-md-2">Logo</label>
    <div class="col-md-10">
         <input type="file" name="txtUploadFile" id="txtUploadFile" class="form-control">
    </div>
</div>

如果我没有select图像文件并保留旧图像,我该如何编辑公司信息?希望有人能帮我解决这个问题..

提前致谢

var logoPath = Directory.GetFiles(Server.MapPath("~/Logo/")).OrderByDescending(f => File.GetCreationTime(f)).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(logoPath))
{
    payroll_company.comp_logo = Path.GetFileName(logoPath);
}

将代码添加到你的else部分,因为你需要的是最后一个图像文件,这也意味着它比其他图像创建得晚files.Otherwise,你需要从数据库中读取它首先,是的,你已经做到了。

经过你的回答,你的payroll_company好像只有一个属性!,那你为什么要保存呢?你只需要跳过 the save code,并在没有上传图片时离开 the return code

你的异常意味着你的对象已经被上下文附加,所以你必须先分离它,然后再附加

var _dc = (IObjectContextAdapter)db;
var _oc = _dc.ObjectContext;
var key;// = payroll_company.Key;
ObjectStateEntry ose;
if (_oc.ObjectStateManager.TryGetObjectStateEntry(key, out ose))
{
    var _entity = (payroll_Company)ose.Entity;
    db.Entry(_entity).State = EntityState.Detached;
}
db.payroll_Company.Attach(payroll_company);
db.Entry(payroll_company).State = EntityState.Modified;