asp.net - 如何在没有冗余的情况下更新/编辑asp.net mvc 5中上传的文件?

标签 asp.net asp.net-mvc if-statement asp.net-mvc-5 updates

我在使用 Razor Engine 更新 Asp.net MVC 5 中的数据时遇到问题。 我的更新代码工作正常,但我有一些问题。当我更新 Image 时,旧图像保留在 Images 文件夹 中。如果旧图像发生变化,我想删除它。如果不改变的话我想保持旧的形象。 我该怎么做 ? 非常感谢您的帮助 我不知道如何为此编写 if 语句:/

CarouselRepositories.cs

public bool Update(NP1.Models.Carousel entity, bool autoSave = true)
    {
        try
        {

            db.Carousels.Attach(entity);
            db.Entry(entity).State = System.Data.Entity.EntityState.Modified;
            if (autoSave)
                return Convert.ToBoolean(db.SaveChanges());
            else
                return false;
        }
        catch
        {
            return false;
        }
    }

管理 Controller

[HttpGet]
    public ActionResult EditCarousel(int id)
    {

        var load = db.Carousels.Find(id);
        return View(load);
    }

    [HttpPost]
    public ActionResult EditCarousel(Carousel carousel, HttpPostedFileBase UploadImage)
    {
        CarouselRepositories blCarousel = new CarouselRepositories();
        string path = "";
        var fileName = "";
        var rondom = "";
        if (UploadImage != null)
        {

            fileName = Path.GetFileName(UploadImage.FileName);
            rondom = Guid.NewGuid() + fileName;
            path = System.IO.Path.Combine(
                                  Server.MapPath("~/Images/Carousel"), rondom);

            carousel.CarouselImage = rondom;
        }
        if (ModelState.IsValid)
        {

            UploadImage.SaveAs(path);
            carousel.CarouselImage = rondom;
            if (blCarousel.Update(carousel))
            {
                return JavaScript("alert('Carousel slide added');");
            }
            else
            {
                return JavaScript("alert('didn't add');");
            }
        }
        else
        {
            return JavaScript("alert('Error');");
        }

    }

EditCarousel.cshtml:

@model NP1.Models.Carousel

@{
ViewBag.Title = "EditCarousel";
Layout = "~/Views/Admin/AdminLayout.cshtml";
}
 @using (Html.BeginForm("EditCarousel", "Admin", FormMethod.Post, new { enctype = "multipart/form-data", id = "myUploadForm" }))
{
@Html.AntiForgeryToken()

<div class="form-horizontal">

    @Html.ValidationSummary(true)
    @Html.HiddenFor(model => model.CarouselID)
    <div class="form-group">
        @Html.LabelFor(model => model.CarouselSubject, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CarouselSubject)
            @Html.ValidationMessageFor(model => model.CarouselSubject)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CarouselInfo, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CarouselInfo)
            @Html.ValidationMessageFor(model => model.CarouselInfo)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CarouselImage, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @*@Html.EditorFor(model => model.CarouselImage)*@
            @Html.ImageFor(model => model.CarouselImage, new {width="300"},"","Images","Carousel")
            @Html.Upload("UploadImage")
            @Html.HiddenFor(model => model.CarouselImage)
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</div>
}

更新了 Amin Controller :

 [HttpPost]
    public ActionResult EditCarousel(Carousel carousel, HttpPostedFileBase UploadImage)
    {
        CarouselRepositories blCarousel = new CarouselRepositories();
        string path = "";
        var fileName = "";
        var rondom = "";
        if (UploadImage != null)
        {

            fileName = Path.GetFileName(UploadImage.FileName);
            rondom = Guid.NewGuid() + fileName;
            path = System.IO.Path.Combine(
                                  Server.MapPath("~/Images/Carousel"), rondom);

            carousel.CarouselImage = rondom;
        }
        else
        {
            fileName = carousel.CarouselImage;
            path = System.IO.Path.Combine(
                                  Server.MapPath("~/Images/Carousel"), fileName);
        }
        if (ModelState.IsValid)
        {

            UploadImage.SaveAs(path); // I got error in this line 
            carousel.CarouselImage = rondom;
            if (blCarousel.Update(carousel))
            {
                return JavaScript("alert('Carousel slide added');");
            }
            else
            {
                return JavaScript("alert('didn't add');");
            }
        }
        else
        {
            return JavaScript("alert('Error');");
        }

    }

最佳答案

假设你想删除当前文件,如果POST方法中UploadImage的值不为null,那么你可以使用System.IO。 File.Delete 方法

private const string _ImagesPath = "~/Images/Carousel";

[HttpPost]
public ActionResult EditCarousel(Carousel carousel, HttpPostedFileBase UploadImage)
{
  if (ModelState.IsValid)
  {
    CarouselRepositories blCarousel = new CarouselRepositories();
    if (UploadImage != null)
    {
      // Delete exiting file
      System.IO.File.Delete(Path.Combine(Server.MapPath(_ImagesPath), carousel.CarouselImage));
      // Save new file
      string fileName = Guid.NewGuid() + Path.GetFileName(UploadImage.FileName);
      string path = Path.Combine(Server.MapPath(_ImagesPath), fileName);
      UploadImage.SaveAs(path)
      carousel.CarouselImage = fileName;
    }
    if (blCarousel.Update(carousel))
    {
      ....
    }
    else
    {
      ....
    }
  }
  else
  {
    ....
  }
}

关于asp.net - 如何在没有冗余的情况下更新/编辑asp.net mvc 5中上传的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702745/

相关文章:

c# - 如何从抽象类列表中检索派生类?

c# - MVC 5 无法使用 Linq to SQL 类创建 Controller

java - ASP MVC5 UserManager 添加方法

javascript - 如何根据jsp中某个下拉选项的值更改表单中字段的属性?

c# - If语句具有多个空文本框

Python 3.3 解释器和一行问题(4 行语句工作正常......)

c# - MVC 2 和 .NET 4.0 的 AllowPartiallyTrustedCallersAttribute 错误

asp.net - 与 Visual Studios 2019 for Web Development 兼容的移动设备模拟器

asp.net - 验证器摘要不会动态更新

asp.net-mvc - 确定哪个提交按钮用于在 asp.net MVC 中发布表单