C# 从“提交”按钮创建CSV文件,并在创建文件失败时显示错误消息
我试图有一个按钮,创建一个csv文件中的数据,并下载它。 有两种选择(据我所知) 我试图从Ajax调用控制器中的操作。 但这对我不起作用,。(所有代码都在我以前的帖子中:) 它不会生成该文件。 所以,我使用了一个提交按钮来调用这个动作,它是有效的,但在这种情况下 如果操作没有生成CSV文件,我需要能够向用户显示消息。 你知道怎么做吗 从视图对操作的调用:C# 从“提交”按钮创建CSV文件,并在创建文件失败时显示错误消息,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我试图有一个按钮,创建一个csv文件中的数据,并下载它。 有两种选择(据我所知) 我试图从Ajax调用控制器中的操作。 但这对我不起作用,。(所有代码都在我以前的帖子中:) 它不会生成该文件。 所以,我使用了一个提交按钮来调用这个动作,它是有效的,但在这种情况下 如果操作没有生成CSV文件,我需要能够向用户显示消息。 你知道怎么做吗 从视图对操作的调用: @using (Html.BeginForm("Export", "Index", FormMetho
@using (Html.BeginForm("Export", "Index", FormMethod.Post))
{
<input type="submit" id="btnSubmit" value="Export" />
}
尝试返回视图时:
返回视图(“索引”)
我需要送一个模型
我可以在返回视图时发送它吗?
以下是我如何称呼我的索引页:
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);
}
public IActionResult Index()
{
var orderList=_unitOfWork.Order.GetAll();
dynamic myModel=new System.dynamic.ExpandoObject();
myModel.Order=\u unitOfWork.Order.GetAll();
myModel.ordercsv=新列表();
ViewBag.getProductName=
新Func(returnProductName);
ViewBag.getStoreName=
新Func(returnStoreName);
ViewBag.getCost=
新职能(返回成本);
ViewBag.errSaveInProgress=false;
ViewBag.ExistInProgress=false;
返回视图(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
//}
}
视图:
@使用(Html.BeginForm(“导出”、“主页”、FormMethod.Post))
{
}
@如果(ViewBag.ErrorMessage!=null)
{
@节脚本{
$(文档).ready(函数(){
警报(“@ViewBag.ErrorMessage”);
});
}
}
结果:
有人吗?仍然坚持这一点:/Hi Brando,谢谢你的回答,我试过了,问题是索引页希望得到一个模型我编辑了原始文章,请看我如何调用我的索引页。你的意思是你想返回索引页并保留模型吗?刚刚发现我可以这样做:返回视图(“索引”,myModel);所以它起作用了!谢谢你的帮助。
[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>
}
}