как обрабатывать загрузку пустого файла в обновлении в ASP.NET CORE 2 - PullRequest
0 голосов
/ 08 июня 2018

У меня есть Edit form и файл для загрузки внутри, если файл для загрузки содержит файл, все нормально, но когда он пуст, он передает значение null в базу данных.Я использую if, чтобы проверить длину загрузки файла, но это не работает.Я также удаляю LogoFile из Bind.вот мой код .cshtml:

<form asp-action="Edit" enctype="multipart/form-data">
<div class="form-group">
                <label asp-for="FirstName" class="control-label"></label>
                <input asp-for="FirstName" class="form-control" />
                <span asp-validation-for="FirstName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="LastName" class="control-label"></label>
                <input asp-for="LastName" class="form-control" />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
<div class="form-group">
                <label asp-for="LogoFile" class="control-label"></label><br />
                <input asp-for="LogoFile" type="file" class="form-control" />
                <img src="/@Html.DisplayFor(model => model.LogoFile)"/>
                <span asp-validation-for="LogoFile" class="text-danger"></span>
            </div>
 <div class="form-group">
                <input type="submit" value="save" class="btn btn-green" />
            </div>
        </form>

, а вот мой код контроллера:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int id, [Bind("Id,FirstName,LastName")] Profile profile,IFormFile LogoFile)
    {

        if (id != profile.Id)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                if (LogoFile != null || LogoFile.Length != 0)

                {
                    var path = "images/" + LogoFile.FileName;

                    using (var stream = new FileStream("wwwroot/" + path, FileMode.Create))
                    {
                        await LogoFile.CopyToAsync(stream);
                        profile.LogoFile = path.ToString();
                    }
                }
                _context.Update(profile);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ProfileExists(profile.Id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction(nameof(Index));
        }
        return View(profile);
    }
...