下载 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();
}