Перенаправление на другую страницу после вызова Response.End () в C # - PullRequest
6 голосов
/ 09 сентября 2010

Я экспортирую gridview в Excel, использую .Net 4.0 в веб-приложении, при загрузке страницы и необходимости создания файла, а затем перенаправления страницы на страницу вызова.Я сталкиваюсь с проблемами, потому что мой код для экспорта в Excel выглядит следующим образом:

gvSummary.Style.Add("font-size", ".6em");
    Response.Clear();
    string attachment = "attachment; filename=filename.xls";
    Response.ClearContent();
    Response.AddHeader("content-disposition", attachment);
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    gvSummary.GridLines = GridLines.Horizontal;
    gvSummary.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();

Я знаю, что если я поставлю Response.Redirect () перед .End (), я буду перенаправлен, нофайл никогда не генерируется, и если я ставлю Response.Redirect () после .End (), я получаю файл, но перенаправления нет.

Код, написанный выше, прекрасно работает при генерации файла, однако, когда после генерации файла я все еще застреваю при просмотре анимации загрузки, потому что не могу вырваться из страницы.Есть идеи?

Ответы [ 6 ]

9 голосов
/ 09 сентября 2010

Предлагаю добавить заголовок перенаправления.Примерно так:

Response.AddHeader("Refresh", "3; url=index.html");

Где 3 - время задержки, а index.html - это URL, который нужно перенаправить на

1 голос
/ 09 сентября 2010

Проблема в Response.End () отправляет последние биты страницы клиенту для завершения запроса. В вашем случае запрос содержит файл.

Одним из возможных решений является открытие новой страницы для загрузки и сохранение перенаправления на текущей странице.

0 голосов
/ 19 июля 2018

Я добавил target="_blank" к ссылке, которая ведет меня на страницу. Поэтому, когда он открывается в новом окне, он отправляет лист Excel в браузер и закрывает страницу, так как после Response.End();

ему больше нечего делать.

Надеюсь, это поможет. Работал на меня.

0 голосов
/ 17 августа 2017

Я попытался открыть отдельную страницу через ScriptManager, который будет загружать мой файл при перенаправлении на исходную страницу.

Итак, я добавил ниже код на моей главной странице:

string strScript = "<script language='javascript'> window.open('CommonDownload.aspx','Report');</script>";
ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false);
Response.Redirect("Page.aspx");

А затем добавил код загрузки в метод Page_Load моей страницы CommonDownload. Через сеанс я передал часть необходимой мне информации на странице CommonDownload.

0 голосов
/ 22 ноября 2016

В JavaScript:

function refresh() { document.location.reload(true); }

, кнопка:

<td valign="top" style=" width:100px ">
<asp:Button runat="server" ID="btnX" Text="X" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text ui-state-hover" OnClientClick="refresh();"  Width="180px" />
</td>
0 голосов
/ 09 сентября 2010

Вы не можете открыть оба файла, поэтому вы можете попробовать установить ссылку на сгенерированный файл xls в новом окне или в качестве источника для iframe

...