首页 > 解决方案 > 在 ASP.NET Core 上 (ModelState.IsValid == false) 时如何持久化 IFormFile 上传

问题描述

当通过带有 Asp.Net Core MVC 模式的表单上传文件时,由于模型绑定,输入上的数据得以保留。但是,当我声明一个具有属性的类型IFormFile[NotMapped]属性作为文件上传的数据传输对象时,数据会被携带但不会被持久化,因此,如果ModelState.IsValid验证失败,我需要将文件和图像再次加载到表单中重新提交。

返回 ASP.NET Core MVC 视图时,有什么方法可以保留(而不是存储)这些数据?

谢谢。

标签: asp.net-coreasp.net-core-mvc

解决方案


将 ViewModel 从服务器返回到客户端后,无法重新选择文件。

对于解决方法,您可以考虑在客户端检查模型,例如:

<div class="row">
    <div class="col-md-4">
        <form asp-action="Create" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="File" class="control-label"></label>
                <input asp-for="File" type="file"  class="form-control" />
                <span asp-validation-for="File" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

推荐阅读