我是asp.net-mvc的新手,现在我正在处理返回excel文件和错误消息,如果返回的文件列丢失,当用户单击按钮。我使用来返回我的文件来查看,但我不知道如何将错误消息一起发送。 (我曾尝试ViewBag,但它没有工作)如何发送文件以查看与错误消息一起?如何返回文件以及错误消息以查看?
0
A
回答
0
我会建议返回文件作为模型,并增加了ModelState
任何错误在你的控制器是这样的:
ModelState.AddModelError("Key", "Error Message");
如果你想在ModelState
解析成JSON在JavaScript中使用,你可以使用这个方法:
public static string ParseModelState(ModelStateDictionary modelState)
{
if (modelState == null) return "";
var dic = new Dictionary<string, string>();
for (var i = 0; i < modelState.Keys.Count; i++)
{
var firstOrDefault = modelState.Values.ElementAt(i).Errors.FirstOrDefault();
if (firstOrDefault != null)
dic.Add(modelState.Keys.ElementAt(i), firstOrDefault.ErrorMessage);
}
return System.Web.Helpers.Json.Encode(dic);
}
而在你的视野:
var modelState = @Html.Raw(Helpers.ParseModelState(ViewData.ModelState));
0
是您在服务器上的文件存储?如果是的话,你可以在URL作为JSON的面值和在JavaScript返回文件,你可以在新窗口中显示错误和负载的文件
return return Json(new {error="Error Message", fileurl="http://yoursite.com/file.etx"});
在客户端(我猜你张贴信息)
$.ajax({
type: "POST",
url: '@Url.Action("Action", "Control")',
data: { para: "value" },
dataType: "json",
success: function(data) {
$('#errorlabel').html(data.error);
window.open(data.fileurl,_blank);
},
error: errorFunc
});
希望这给你一个好主意,开始
1
我想你可以尝试使用Ajax的生成excel文件到临时文件夹中的服务器,并通过Ajax响应下载,代码如下:
$.blockUI({ message: '<h3><img src="@Url.Content("~/Content/images/busy.gif")" /> Please wait a moment...</h3>' });
$.ajax({
type: "POST",
url: '@Url.Action("ExportExcel","YourController")',
contentType: "application/json; charset=utf-8",
dataType: "json",
}).done(function (data) {
//console.log(data.result);
$.unblockUI();
if (data.fileName != "") {
window.location.href = "@Url.RouteUrl(new { Controller = "YourController", Action = "Download"})/?file=" + data.fileName;
}
});
控制器
:
[HttpPost]
public JsonResult ExportExcel()
{
DataTable dt = DataService.GetData();
var fileName = "Excel_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls";
string fullPath = Path.Combine(Server.MapPath("~/temp"), fileName);
using (var exportData = new MemoryStream())
{
Utility.WriteDataTableToExcel(dt, ".xls", exportData);
FileStream file = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
exportData.WriteTo(file);
file.Close();
}
var errorMessage = "you can return the errors in here!";
return Json(new { fileName = fileName, errorMessage = "" });
}
和下载操作
[HttpGet]
[DeleteFileAttribute]
public virtual ActionResult Download(string file)
{
string fullPath = Path.Combine(Server.MapPath("~/temp"), file);
return File(fullPath, "application/vnd.ms-excel", file);
}
在这里,我创建了自动删除过滤器删除该文件下载后:
/// <summary>
/// The Action filter for delete the file after downloaded
/// </summary>
public class DeleteFileAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Flush();
string filePath = (filterContext.Result as FilePathResult).FileName;
System.IO.File.Delete(filePath);
}
}
相关问题
- 1. 将错误消息返回给AJAX以及HTTP状态代码
- 2. 以XML响应返回错误消息
- 3. MySQL错误消息以及PHP错误消息
- 4. Tidy.NET - 如何查看错误消息?
- 5. 查询返回SQL错误消息537
- 6. Laravel - 如何返回json错误消息?
- 7. ajax如何从PHP文件返回错误消息
- 8. 返回modelState错误消息
- 9. 返回REST 400-错误请求以及其他信息
- 10. 返回从控制器回错误以查看在Spring MVC
- 11. 在nginx中流明http错误500以及如何查看error_log?
- 12. 如何写入Windows事件以及以后如何查看?
- 13. 从控制器传递错误消息以在zf2中查看
- 14. 添加错误消息以返回。 SQL Server
- 15. R函数返回值以及警告消息
- 16. 返回文件和消息
- 17. 错误 - 返回JSON以及HTTP状态代码错误JAX-RS
- 18. 使用返回的错误消息,以确定是否存在错误
- 19. 如何返回File()ActionResult以及View()?
- 20. 如果mysql查询返回任何内容,则难以回显错误消息PEAR PHP
- 21. 从批处理文件返回错误消息
- 22. 查看Doxygen文档中的.cxx文件以及.h文件
- 23. soap webservices - 返回错误消息?
- 24. xp20:add-daytime返回FOTY0001错误消息
- 25. Shellexecute返回值错误消息
- 26. Python - 消息加密返回`NoneType`错误
- 27. Django Ajax返回错误消息
- 28. Rails Rake测试返回错误消息
- 29. 从Parse.Cloud.beforeSave返回错误消息到Unity
- 30. 在数据库更新后返回成功/失败消息以查看