通过响应下载文件后重新加载页面

时间:2014-08-28 11:29:55

标签: asp.net asp.net-mvc refresh response

我正在编写一个报告工具,您可以在其中直接显示报告或将其下载为Excel文件。如果您只是想在页面上显示它,网站将按预期重新加载。如果它作为excel文件下载,下载工作,但页面不会重新加载。这对我来说是一个问题因为我不知道如何在之后禁用加载动画。通过对响应对象的写入操作完成下载。这是代码:

private void ExcelExport(DataTable outList)
{
     ViewBag.Reload = true;
     Response.ClearContent();
     Response.Buffer = true;
     Response.AddHeader("content-disposition", "attachment; filename=report.xls");
     Response.ContentType = "application/ms-excel";
     Response.Charset = "";
     Response.Output.Write(Excel.GetXml(outList));
     Response.Flush();
     Response.End();
}

从我的控制器中的ActionResult方法调用代码(ExcelExport方法也位于其中):

public ActionResult WisPriceMatrix(string cc, string sl, string exp)
{
     ViewBag.StorageLocations = this.StorageLocations;
     ViewBag.WisPriceMatrixReport = null;
     int cleanCode = 3;
     if ((cc != null && cc != string.Empty && Int32.TryParse(cc, out cleanCode)) || (sl != null && sl != string.Empty))
     {
          sl = sl == string.Empty ? null : sl;

          ViewBag.ParameterSl = sl;
          ViewBag.ParameterCleanCode = cleanCode;

          DataTable outList = dc.GetWisPriceMatrix(sl, cleanCode);

          if (exp == null || exp == string.Empty || exp != "1")
          {
               ViewBag.WisPriceMatrixReport = outList;
          }
          else
          {
                if (outList.Count > 0)
                {
                     this.ExcelExport(outList);
                }
                else
                {
                     ViewBag.NoResults = "1";
                }
           }
    }

    return View();
}

任何想法我怎么能强迫页面重新加载?

我尝试创建一个ViewBag变量,该变量表明重新加载是neede并通过JavaScript对其做出反应,但由于页面没有刷新,因此这是成功的; - )。

1 个答案:

答案 0 :(得分:0)

在您的情况下,为了重新加载页面,您可以使用Viewbag并在控制器上设置ViewbagViewbag.data="reload",然后在视图中选中Viewbag

$(document).ready(function(){
  if('@Viewbag.data' == "reload")
  {
    window.location.reload(true);
  }
});

或者您可以代替return View()使用return RedirectToAction("WisPriceMatrix")作为RedirectToAction创建新的http(302)请求并重新加载页面。