首页 > 解决方案 > 如何在 ASP.NET CORE 2 中处理更新中的空文件上传

问题描述

我在Edit form里面有一个和一个文件上传,如果上传文件有文件,一切正常,但是当它为空时,它会将null值传递给数据库。我if用来检查文件上传长度,但它不起作用。我也LogoFileBind. 这是我的 .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);
    }

标签: asp.netasp.net-mvcrazorasp.net-core

解决方案


推荐阅读