c# - 从提交按钮创建 CSV 文件并在创建文件失败时显示错误消息
问题描述
我正在尝试有一个在 csv 文件中创建数据并下载它的按钮。有 2 个选项(我知道)我试图从 Ajax 调用控制器中的操作。但这对我不起作用,。(所有代码都在我之前的帖子中:Sending string in controller to Ajax in View)它不会生成文件。所以,我正在使用一个调用该操作的提交按钮,它可以工作,但在这种情况下,如果该操作没有生成 CSV 文件,我需要能够向用户显示一条消息。有什么想法可以做到吗?
行动号召 从视图中:
@using (Html.BeginForm("Export", "Index", FormMethod.Post))
{
<input type="submit" id="btnSubmit" value="Export" />
}
控制器:
[HttpPost]
public FileResult Export()
{
var orderList = _unitOfWork.Order.GetAll().Where(a => a.OrderStatus == SD.OrderStatusAccepted).OrderBy(a => a.Id);
if (orderList.Count() == 0)
{
//Show message to the user that csv was not created
}
StringBuilder sb = new StringBuilder();
//
// generate data in string builder
//
return File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", fileName);
}
当试图返回视图时:return View("Index");
我需要发送一个模型,我可以在返回视图时发送它吗?这是我如何调用我的索引页面:
public IActionResult Index()
{
var orderList = _unitOfWork.Order.GetAll();
dynamic myModel = new System.Dynamic.ExpandoObject();
myModel.Order = _unitOfWork.Order.GetAll();
myModel.ordercsv = new List<KTSite.Areas.Warehouse.Views.OrderWarehouse.CSVOrderLine>();
ViewBag.getProductName =
new Func<int, string>(returnProductName);
ViewBag.getStoreName =
new Func<int, string>(returnStoreName);
ViewBag.getCost =
new Func<int, double, double>(returnCost);
ViewBag.errSaveInProgress = false;
ViewBag.ExistInProgress = false;
return View(myModel);
}
解决方案
根据您的要求,我建议您可以使用 iactionresult 而不是 fileresut 并设置一个 viewbig 来存储错误消息。
更多细节,你可以参考下面的例子:
[HttpPost]
public IActionResult Export()
{
// modify the if condition according to your requirement
if (true)
{
ViewBag.ErrorMessage = "File not generated";
return View("Index");
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("aaaaaaaaaaaaaaaaaaaaaaaa");
//
// generate data in string builder
//
return File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", "aaaaaa");
}
//var orderList = _unitOfWork.Order.GetAll().Where(a => a.OrderStatus == SD.OrderStatusAccepted).OrderBy(a => a.Id);
//if (orderList.Count() == 0)
//{
// //Show message to the user that csv was not created
//}
}
看法:
@using (Html.BeginForm("Export", "Home", FormMethod.Post))
{
<input type="submit" id="btnSubmit" value="Export" />
}
@if (ViewBag.ErrorMessage != null)
{
@section Scripts{
<script>
$(document).ready(function () {
alert("@ViewBag.ErrorMessage");
});
</script>
}
}
结果:
推荐阅读
- html - 为什么 min-width:0 不适用于我的 flex 元素?
- string - 如何在 MIPS 上存储/读取字符串?
- mysql - 将 Json 数组循环到数据库 Laravel?
- azure - 无法在 Azure 沙盒上启动沙盒
- php - 使用 jQuery 打印 $variable 值不能正常工作?
- java - 仅根据字段名称对类数组进行排序
- python - 如果字段包含列表中的任何字符串,则向数据集添加标志
- python - 如何在传递给 Catboost 时应用池或处理数据
- python - 如何自动拦截线程模块中对 lock.acquire() 和 lock.release() 的调用?
- python-3.x - Python Tkinter Image 说“没有这样的文件或目录”