首页 > 解决方案 > 处理 ajax 500 “内部服务器错误”

问题描述

一个已经被问过很多次的问题......但我似乎无法让它发挥作用!

我只需按一下按钮即可导入大量文件。有时它会因任何原因而失败,如果文件导入失败,我会尝试 {} catch {} 错误。所有其他文件仍然可以成功。

之后,我将返回一个带有“ImportFileResult”类的 PartialView。但是由于某种原因,即使处理了异常,Jquery 结果仍然进入'fail()',但我只想要我的'ImportFileResult'列表并显示一个很好的已导入或未导入文件列表。

我可以看到 importGasResultsDto 看起来不错。

这种情况下的错误是一个 SQL 错误,其中数据将被截断,这对于目前和我的测试用例来说都很好。chrome 控制台显示此错误,而不是我的列表成功。

相关代码:

$(document).on('click', '#btn-import', function (e) {
    e.preventDefault();
    $.ajax({
        type: "POST",
        url: 'App/Gas/Import'
    }).done(function (data) {
        $('#validationErrorsDiv').html(data );
    }).fail(function (data, textStatus, errorThrown) {
            
    }).always(function (data) {
    });
});

控制器部分:

public IActionResult Import()
{
    var importGasResultsDto = new List<ImportGasResultDto>();
    foreach (var file in Directory.GetFiles(@"\\importfolder").Where(c => c.EndsWith("xls") || c.EndsWith("xlsx")))
    {
        var gasReport = new GasReportDto();

        string filename = Path.GetFileName(file);
        var splittedFilename = filename.Split('_');
                        
        gasReport.Grant = splittedFilename[2].Trim();
        gasReport.ContentType = System.Web.MimeMapping.GetMimeMapping(filename);
        gasReport.FileContent = System.IO.File.ReadAllBytes(file);
        gasReport.Filename = filename;

        importGasResultsDto.Add(_gasAppService.InsertGasReports(gasReport));
    }

    return PartialView("_ImportResult", importGasResultsDto);
}

存储库:

public ImportGasResultDto InsertGasReports(GasReportDto gasReportDtos)
{
    ImportGasResultDto importGasResultDto = new ImportGasResultDto();
    var roles =  _roleManager.Roles.ToList();

    var gasReport = ObjectMapper.Map<GasReport>(gasReportDtos);
             
    try
    {
        importGasResultDto.Filename = gasReport.Filename;
        importGasResultDto.Id = _gasRepository.InsertAndGetId(gasReport);

        if (importGasResultDto.Id > 0)
        {
            importGasResultDto.IsError = false;
            importGasResultDto.Message = "Imported successfully.";
        }
        else
        {

            importGasResultDto.IsError = true;
            importGasResultDto.Message = "Something went wrong, please contact your administrator";
        }

    }
    catch (Exception ex )
    {
        importGasResultDto.IsError = true;
        importGasResultDto.Message = ex.InnerException != null ? ex.InnerException.ToString() : ex.Message;
    }

    return importGasResultDto;
}

标签: c#jqueryajax

解决方案


推荐阅读