下载 CSV 文件并显示 Sweet alert 错误消息
Download CSV file And show Sweet alert error Message
我有一个带有文本区域(用户在此处输入所有订单)和提交按钮的视图,
按下提交按钮后,操作方法将处理所有订单并将它们保存在数据库中。
如果所有订单均已成功处理,我将return返回带有指示器的视图 (ViewBag)
这将从 javascript.
弹出一个甜蜜的警报
如果一个或多个订单失败,我将下载一个 csv 文件来显示失败的订单。
此外,我想返回到视图,这样我就可以显示一个甜蜜的警报错误消息。
我知道如何下载文件,并且我知道如何 return 带有错误消息和甜蜜警报。
我只是不知道如何同时做这两件事:)
我知道我不能同时发送 2 个请求,我有什么选择?
控制器中的提交按钮操作:
public IActionResult AddOrdersExtension(OrderVM orderVM)
{
if (ModelState.IsValid)
{
//
foreach(var order in ordersList)
{
if(isStoreAuthenticated(orderVM))
_unitOfWork.Order.Add(orderVM.Orders);
_unitOfWork.Save();
else
{
failedLines = failedLines + "," + orderVM.Orders.CustName;
}
}
if (failedLines.Length > 0)
{
ViewBag.Failed = true;
StringBuilder sb = new StringBuilder();
//
// populate string builder with failed line
//
// downlaod csv file
return File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", "Error_log.csv");
}
else // all orders processed successfully
{
ViewBag.Failed = false;
return View(orderVM);
}
}
Java 视图中的脚本:
@section Scripts{
if (ViewBag.failed)
{
<script>
swal("Error Occured!", "Failed to process All Orders", "error")
.then((value) => {})
</script>
}
else
{
<script>
swal("Success!", "Orders were Processed Successfully!", "success")
.then((value) => { window.location.href = '/UserRole/Order'; })
</script>
}
}
正如您所说,您不能同时 return 两个响应,我会解决这个问题,它有一个文本区域,其中包含显示失败订单的 CSV 数据,并且可以选择将文本下载到一个文件
您可以使用此 Javascript 函数从 TextArea
下载文件
function generateTextFile(textareaElement, filenameWithoutExtension) {
var textToWrite = textareaElement.val();
var textFileAsBlob = new Blob([textToWrite], {type:'text/csv'});
var fileNameToSaveAs = filenameWithoutExtension + ".csv";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else {
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
}
我有一个带有文本区域(用户在此处输入所有订单)和提交按钮的视图,
按下提交按钮后,操作方法将处理所有订单并将它们保存在数据库中。
如果所有订单均已成功处理,我将return返回带有指示器的视图 (ViewBag) 这将从 javascript.
弹出一个甜蜜的警报如果一个或多个订单失败,我将下载一个 csv 文件来显示失败的订单。
此外,我想返回到视图,这样我就可以显示一个甜蜜的警报错误消息。
我知道如何下载文件,并且我知道如何 return 带有错误消息和甜蜜警报。
我只是不知道如何同时做这两件事:)
我知道我不能同时发送 2 个请求,我有什么选择?
控制器中的提交按钮操作:
public IActionResult AddOrdersExtension(OrderVM orderVM)
{
if (ModelState.IsValid)
{
//
foreach(var order in ordersList)
{
if(isStoreAuthenticated(orderVM))
_unitOfWork.Order.Add(orderVM.Orders);
_unitOfWork.Save();
else
{
failedLines = failedLines + "," + orderVM.Orders.CustName;
}
}
if (failedLines.Length > 0)
{
ViewBag.Failed = true;
StringBuilder sb = new StringBuilder();
//
// populate string builder with failed line
//
// downlaod csv file
return File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", "Error_log.csv");
}
else // all orders processed successfully
{
ViewBag.Failed = false;
return View(orderVM);
}
}
Java 视图中的脚本:
@section Scripts{
if (ViewBag.failed)
{
<script>
swal("Error Occured!", "Failed to process All Orders", "error")
.then((value) => {})
</script>
}
else
{
<script>
swal("Success!", "Orders were Processed Successfully!", "success")
.then((value) => { window.location.href = '/UserRole/Order'; })
</script>
}
}
正如您所说,您不能同时 return 两个响应,我会解决这个问题,它有一个文本区域,其中包含显示失败订单的 CSV 数据,并且可以选择将文本下载到一个文件
您可以使用此 Javascript 函数从 TextArea
下载文件function generateTextFile(textareaElement, filenameWithoutExtension) {
var textToWrite = textareaElement.val();
var textFileAsBlob = new Blob([textToWrite], {type:'text/csv'});
var fileNameToSaveAs = filenameWithoutExtension + ".csv";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else {
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
}