我是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. Zend的回送消息,以查看
- 5. Tidy.NET - 如何查看錯誤消息?
- 6. Laravel - 如何返回json錯誤消息?
- 7. 查詢返回SQL錯誤消息537
- 8. MySQL查詢返回錯誤消息
- 9. ajax如何從PHP文件返回錯誤消息
- 10. 如何以及在哪裏可以解釋從java.lang.String返回的Java錯誤消息「3」?
- 11. 返回modelState錯誤消息
- 12. 返回REST 400-錯誤請求以及其他信息
- 13. 如何寫入Windows事件以及以後如何查看?
- 14. 返回從控制器回錯誤以查看在Spring MVC
- 15. 在nginx中流明http錯誤500以及如何查看error_log?
- 16. 從控制器傳遞錯誤消息以在zf2中查看
- 17. 如何從Catch塊返回錯誤消息。現在空返回
- 18. 添加錯誤消息以返回。 SQL Server
- 19. 如何列出基於文件創建的文件以及文件中的特定錯誤消息
- 20. R函數返回值以及警告消息
- 21. 如何設置web.config以查看ASP.NET MVC3項目的完整錯誤消息
- 22. 返回文件和消息
- 23. 錯誤 - 返回JSON以及HTTP狀態代碼錯誤JAX-RS
- 24. 返回模型以查看與selectlistitem錯誤的默認值
- 25. 如何處理錯誤消息「FontFamily bestFont == NULL,所以返回空的FakedFont」
- 26. 如何獲得DEFAULT ERROR消息以及自定義RAISERROR消息
- 27. 使用返回的錯誤消息,以確定是否存在錯誤
- 28. 在Python UDF中查看錯誤消息
- 29. 傳遞錯誤以查看
- 30. 如何返回File()ActionResult以及View()?