我有一个应用程序,用户可以使用此按钮下载excel报告:
<a href="@Url.Action("GetYearlyReport", new {@ViewBag.plantId})" class="excelIcon" title="Get Yearly Report"></a>
我的方法如下:
[HttpPost]
public ActionResult GetYearlyReport(int plantId)
{
string fileName = Reports.GenerateYearlyReport();
if (!String.IsNullOrEmpty(fileName))
{
byte[] fileBytes = GetFile(fileName);
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
}
return Json(new { Result = "ERROR", Message = "Missing some parameters." });
}
现在,其中文件名不为空,然后我得到了文件,但是当它被重定向到我现在被重定向到不存在的页面GetYearlyReport,而我想只是说来自json的消息,那是可能的吗?
答案 0 :(得分:1)
为什么不添加另一个if()
语句来处理文件名为空的场景,并返回错误并处理客户端?
$.ajax({
url: 'xxx/GetYearlyReport',
data: { plantId: plantId},
type: 'POST',
error: function (xhr, textStatus, exceptionThrown) {
if (xhr.status == xxx) {
alert(xhr.responseText);
}
},
success: function (data) {
if(data.Result = 'ERROR'){
//do something
alert(data.Message);
}
}
});
或者更好地为ajax调用定义一个常见的错误处理程序?
$(document).ajaxError(function (e, xhr, settings) {
if (xhr.status == 401)
{
alert("unauthorized");
}
else if (xhr.status == 0) {
alert(' Check Your Network.');
} else if (xhr.status == 404) {
alert('The resource you are looking for can not be found.');
} else if (xhr.status == 500) {
alert('Internel Server Error.');
} else {
alert('Unknow Error.\n' + x.responseText);
}
});
答案 1 :(得分:1)
您的代码似乎很好,我相信在Reports.GenerateYearlyReport
方法中发生了重定向,必须有一种方法可以在调用之前检查方法的结果。