Asp.net mvc 下载文件后如何更新ModelStateError?
[Web dev noob-不熟悉javascript、jquery、ajax和类似术语,不能完全理解其概念,因此SO.中介绍的大多数“基本”解决方案来自Winforms开发] 我想做的事:Asp.net mvc 下载文件后如何更新ModelStateError?,asp.net-mvc,export-to-excel,modelstate,Asp.net Mvc,Export To Excel,Modelstate,[Web dev noob-不熟悉javascript、jquery、ajax和类似术语,不能完全理解其概念,因此SO.中介绍的大多数“基本”解决方案来自Winforms开发] 我想做的事: 上载基于模板编码的excel文件(多行)(有一个input type=“file”和一个上载按钮) 执行所有类型的验证(例如,未选择任何文件、选择了xls/xlsx以外的文件、上载文件的实际解析和验证等)-使用ModelState.AddModelError() 如果在解析文件时,验证逻辑发现了错误,则会修
input type=“file”
和一个上载按钮)ModelState.AddModelError()
EPPlus
我的问题: 到目前为止,我已经可以上传一个文件,然后验证是否成功或有错误。如果是后者,我已经可以下载错误日志文件了。我不能做的是尝试组合产生验证错误的操作,然后故意上传有错误的excel文件。请参阅下文,了解将要采取的实际步骤 步骤1:例如,用户在没有首先浏览相关文件的情况下单击“上载”按钮,将显示“错误:未选择任何文件”等消息 步骤2:用户现在在执行步骤1后选择一个文件,但该文件存在无法通过验证逻辑的错误
private void CreateErrorLog(Stream stream, string fileName)
{
this.ModelState.AddModelError("BulkUploadError", "Please refer to the downloaded file for errors.");
// generation of the excel log file
...
this.DownloadExcel(excelPackage, Path.GetFileName(newFileName));
}
public void DownloadExcel(ExcelPackage package, string fileName)
{
this.Response.Clear();
this.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
this.Response.AddHeader("content-disposition", $"attachment;filename={fileName}");
this.Response.BinaryWrite(package.GetAsByteArray());
this.Response.End();
}
正如我所料,这段代码应该替换步骤1中显示的ModelState错误:“错误:未选择任何文件”→ “有关错误,请参阅下载的文件。”
实际情况:
日志文件已下载,但错误消息未更新
我试图做的事(考虑到我对web开发一无所知):
尝试了一些随机调试-我注释掉了调用DownloadExcel
方法的那一行,使用该行,错误消息成功地更新了
我可以从中得出什么:
下载肯定会阻止显示的ModelState错误消息的更新
要求:
我现在如何同时做到这两个呢? 另外,我的观点是:
@{
ViewBag.Title = "Bulk Upload";
}
<h2>Bulk Upload</h2>
@using (Html.BeginForm("Bulk", "MyModel", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.ValidationMessage("BulkUploadError", new { @class = "text-danger" })<br>
<label for="file">File path:</label>
<input type="file" name="file" id="file" accept=".xls, .xlsx" /><br><br>
<input type="submit" value="Upload" class="btn main-button" />
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
@{
ViewBag.Title=“批量上传”;
}
批量上传
@使用(Html.BeginForm(“Bulk”、“MyModel”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@ValidationMessage(“BulkUploadError”,new{@class=“text danger”})
文件路径:
}
@ActionLink(“返回列表”、“索引”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}