[ Web开发新手-不熟悉javascript,jquery,ajax和类似术语,并且不能完全理解其概念,因此大多数SOA中都提供了“基本”解决方案。来自Winforms开发]
我要做什么:
input type="file"
和一个Upload按钮)编码的excel文件(多行)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错误:“错误:未选择文件”→“请参考下载的文件以获取错误。”
实际情况:
已下载日志文件 ,但错误消息未更新。
我尝试做的事情(考虑到我在网络开发人员中的零知识):
尝试了一些随机调试-我注释了调用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")
}