1

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

4

2 回答 2

1

您的代码看起来不错,我相信方法中发生了重定向Reports.GenerateYearlyReport,必须有一种方法可以在调用方法之前检查方法的结果。

于 2013-06-01T17:34:00.303 回答
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);
            }
});
于 2013-06-01T17:12:53.667 回答