MVC Редактировать вид с изображениями не работает!Создает новый вместо того, чтобы перезаписывать существующий выбранный - PullRequest
0 голосов
/ 15 мая 2018

просто извините за вопрос, потому что есть тонны информации относительно загрузки изображений с использованием MVC и SQL-сервера, но дело в том, что у меня есть эта проблема в течение 3 дней, и я не смог найти ничего конкретного.

У меня есть проект MVC с представлением «Правка» и возможностью загрузить и отобразить изображение, проблема в том, что когда вы сохраняете изменения, создается новая строка в моей таблице с загруженным изображением и изображением из строки выбранное пропало, но я хочу переопределить существующее изображение в строке, выбранной с загруженным новым (в основном редактируйте всю строку, включая изображение, вместо того, чтобы возиться с новыми строками). Я думаю, проблема в моем контроллере, но каждый раз, когда я пытаюсь что-то новое, просто не работает. Спасибо!

HomeController:

 public JsonResult ImageUpload(ImageViewModel model)
    {
        ImageDatabaseEntities6 db = new ImageDatabaseEntities6();
        int imgId = 0;
        var file = model.ImageFile;
        byte[] imagebyte = null;
        if (file != null)
        {
            file.SaveAs(Server.MapPath("/UploadImage/" + file.FileName));
            BinaryReader reader = new BinaryReader(file.InputStream);
            imagebyte = reader.ReadBytes(file.ContentLength);
            imageData img = new imageData();
            img.ImageTitle = file.FileName;
            img.ImageByte = imagebyte;
            img.ImagePath = "/UploadImage/" + file.FileName;
            db.imageDatas.Add(img);
            db.SaveChanges();
            imgId = img.ImageId;
        }
        return Json(jobs, JsonRequestBehavior.AllowGet);
    }

    public ActionResult DisplayingImage(int imgid)
    {
        ImageDatabaseEntities6 db = new ImageDatabaseEntities6();

        var img = db.imageDatas.SingleOrDefault(x => x.ImageId == imgid);
        return File(img.ImageByte, "image/jpg");
    }

    public ActionResult Edit(int? ImageId)
    {
        if (ImageId == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

       imageData jobs = db.imageDatas.Find(ImageId);

        if (jobs == null)
        {
            return HttpNotFound();
        }
        return View(jobs);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(imageData jobs)
    {
        if (ModelState.IsValid)
        {
            db.Entry(jobs).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(jobs);
    }

Редактировать вид:

 @model JobsManagerApp.Models.imageData

@{
    ViewBag.Title = "Edit";
}

<img src="@Url.Content(Model.ImagePath)" height="140" />

<div class="container">
    <div class="col-md-4">
        <input type="file" id="SelectImage" /><br />
        <a href="#" class="btn btn-sm btn-danger" onclick="UploadImage()">Upload</a>
    </div>

    <div class="col-md-4 thumbnail" id="UploadedImage"></div>
</div>

<br /><br />

<h2>Edit</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <dl class="dl-horizontal">         
        <dt>
            @Html.DisplayName("Type of Job")
        </dt>
        <dd>
            @Html.EditorFor(model => model.TypeOfJob)
        </dd>
        <dt>
            @Html.DisplayName("Tools Needed")
        </dt>
        <dd>
            @Html.EditorFor(model => model.ToolsNeeded)
        </dd>
        <dt>
            @Html.DisplayName("Profit")
        </dt>
        <dd>
            @Html.EditorFor(model => model.Profit)
        </dd>
        <dt>
            @Html.DisplayName("Expenses less than five miles")
        </dt>
        <dd>
            @Html.EditorFor(model => model.ExpensesLessThanFiveMiles)
        </dd>
        <dt>
            @Html.DisplayName("Expenses less than ten miles")
        </dt>
        <dd>
            @Html.EditorFor(model => model.ExpenseslessThanTenMiles)
        </dd>
        <dt>
            @Html.DisplayName("Expenses less than twenty miles")
        </dt>
        <dd>
            @Html.EditorFor(model => model.ExpensesLessThanTwentyMiles)
        </dd>
        <dt>
            @Html.DisplayName("Expenses less than thirty miles")
        </dt>
        <dd>
            @Html.EditorFor(model => model.ExpensesLessThanThirtyMiles)
        </dd>
        <dt>
            @Html.DisplayName("Materials")
        </dt>
        <dd>
            @Html.EditorFor(model => model.Materials)
        </dd>
        <dt>
            @Html.DisplayName("Estimate duration")
        </dt>
        <dd>
            @Html.EditorFor(model => model.EstimateDuration)
        </dd>
        <dt>
            @Html.DisplayName("Number of employees")
        </dt>
        <dd>
            @Html.EditorFor(m => m.EstimateNofEmployees)
        </dd>
</dl>

<input type="submit" value="Save Changes" />

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

<script>
    var UploadImage = function () {
        var file = $("#SelectImage").get(0).files;
        var data = new FormData;
        data.append("ImageFile", file[0]);
        $.ajax({
            type: "POST",
            url: "/Home/ImageUpload",
            data: data,
            contentType: false,
            processData: false,
            success: function (imgID) {
                $("#UploadedImage").append('<img src="/Home/DisplayingImage?imgID=' + imgID + '"class=img-responsive  thimbnail"/>');
            }
        })
    }
</script>
}
@Html.ActionLink("Back to List", "Index")enter code here

1 Ответ

0 голосов
/ 15 мая 2018

Чтобы перезаписать строку, если она уже существует, или вставить новую строку, если ее нет, измените db.imageDatas.Add(img); на db.imageDatas.AddOrUpdate(id => id.ImageTitle, img); и добавьте using System.Data.Entity.Migrations; в начало вашего файла.

Затем вам нужно будет получить imageData ImageID из базы данных и заменить imgId = img.ImageId; на imgId = db.imageDatas.FirstOrDefault(id => id.ImageTitle == img.ImageTitle);.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...