当找不到文件时,MVC返回json信息

时间:2013-06-01 16:46:06

标签: asp.net-mvc asp.net-mvc-4

我有一个应用程序,用户可以使用此按钮下载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的消息,那是可能的吗?

2 个答案:

答案 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方法中发生了重定向,必须有一种方法可以在调用之前检查方法的结果。