首页 > 解决方案 > 从提交按钮创建 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);
}

标签: c#asp.net-mvcasp.net-core

解决方案


根据您的要求,我建议您可以使用 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>

    }
}

结果:

在此处输入图像描述


推荐阅读