Это можно сделать, просто разделив эту функцию контроллера на две. Первая функция сохранит файл во временной папке и передаст имя файла функции jjery Ajax, а в разделе об успешном выполнении она будет перенаправлена ко второй функции в Контроллер. Здесь мы загрузим файл
. Здесь находится Ajax
function ExportErrorListToExcel() {
debugger;
$.ajax({
url: "Import/ExportErrorToExcel",
type: "POST",
data: { dataExchangeSelectedColum: $('#hdnSelectedColumn').val(), entityvalue: $('#hdnEntity').val(), filename: $('#hdnFileName').val() },
success: function (responsetext, status, xhr) {
debugger;
window.location = 'Import/DownloadErrorData?fname=' + responsetext.FileName;
}
});
// $('#ExcelExportForm').submit();
}
. Здесь находится функция контроллера, где файл сохраняется во временную папку
#region ExportErrorToExcel
//This function will return the file name to script
public ActionResult ExportErrorToExcel(string dataExchangeSelectedColum, string entityvalue, string filename)
{
UA patsUA = Session["PaTSUA"] as UA;
DataTable dataTable = null;
dataTable = _dataExchangeBusiness.DataValidation(dataExchangeSelectedColum, entityvalue, filename, patsUA.DBConnectionString);
string tempPath = Server.MapPath("~/Temp/" + Guid.NewGuid().ToString()+ ".xlsx");
_dataExchangeBusiness.ExportErrorToExcel(dataTable,tempPath, entityvalue);
string fname = Path.GetFileName(tempPath);
return Json(new { Result = "true", Message = "Success", FileName = fname,Entity=entityvalue });
}
#endregion ExportErrorToExcel
[116 ] Вот вторая функция контроллера для загрузки файла из папки Temp
#region DownloadErrorData
//In this function recieve the filename and will download it from the location
public ActionResult DownloadErrorData(string fname)
{
string fileName ="ErrorList.xlsx";
string filePath= Path.Combine(Server.MapPath("~/Temp/" + fname));
try
{
string[] allFiles = Directory.GetFiles(Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar);
foreach (string file in allFiles)
{
FileInfo fileinfo = new FileInfo(file);
if (fileinfo.CreationTime < DateTime.Now.AddDays(-2))
{
fileinfo.Delete();
}
}
}
catch (Exception ex)
{
throw ex;
}
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//web content type of .xlsx files
return File(filePath, contentType, fileName);
}
#endregion DownloadErrorData
Надеюсь, это кому-нибудь поможет:)
Фронтального контроллера set_exception_handler
рано в выполнении (не забывают составлять error_reporting()
). set_exception_handler
берет в качестве его параметра, что php называет "обратный вызов" . Можно передать метод объекта как так:
// $object->methodName() will be called on errors
set_exception_handler(array($object, 'methodName'));
Переносят Ваш код диспетчеризации с try/catch
для ловли любого кода, который ДЕЙСТВИТЕЛЬНО выдает исключения. Часть выгоды Вашего кода поймает исключения всех Ваших собственных кодов, плюс [1 112] приблизительно [1 112] php ошибки, которые не генерировали исключение исходно (например, fopen
или что-то) благодаря Вашему set_exception_handler
вызов выше. php ручные состояния:
следующие ошибочные типы не могут быть обработаны с определяемой пользователем функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT повысили в файле, где set_error_handler () называют.
ошибки Журнала по мере необходимости.
Создают ошибочный шаблон страницы ("Представление"), который управляет на Объекте исключения ("Модель") и структурные распечатки программы целым отслеживанием стека для Вас в разработке. Создайте другой шаблон, который переходит к производству. Перейдите на своей среде, например:
catch(Exception $e) {
// log error as necessary here.
if("in developement") {
// $e would be available to your template at this point
include "errortemplates/dev.php";
} else {
include "errortemplates/prod.php";
}
}
Существует более определенная информация об "обратных вызовах" PHP здесь . Для использования статического метода обратный вызов - что-то как
<?php
set_exception_handler(array('MyClass','staticMethod'));
?>
Для использования метода от инстанцированного объекта, это:
<?php
set_exception_handler(array($myObject, 'objectMethod'));
?>
И использовать глобальную функцию, это справедливо:
<?php
set_exception_handler('my_global_function');
?>
От пути это звучит, Вы будете использовать set_exception_handler. Это гарантирует, что все исключения обработаны тем же самым способом. Существуют места, чтобы использовать блоки попытки/выгоды в Вашем приложении, сказать, хотите ли Вы проверить на единственное исключение, которое должно не обязательно быть поймано таким же образом.
До установки set_exception_handler, я не уверен, можно ли установить функцию, чтобы быть методом объекта, если это не статический метод. Кажется, что это имеет место. Существует больше информации в http://us2.php.net/set_exception_handler