2012-06-12 4 views
0

Мне нужно перенаправить на ту же страницу после загрузки файла!не может перенаправить после загрузки файла

, когда я говорю Response.Redirect .. он говорит, не может перенаправить после заголовков HTTP были отправлены

может кто-нибудь помочь мне с этим?

Я закрепил файл с помощью ionic.zip и загрузил его.

PS: Позвольте мне знать, если я должен сделать мой вопрос более ясно, я могу объяснить :(

Response.Clear(); 
    Response.BufferOutput = false; 
    string filename = "results" + ".zip"; 
    Response.ContentType = "application/zip"; 
    Response.AddHeader("content-disposition", "filename=" + filename); 

    using (ZipFile zip = new ZipFile()) 
    { 
     zip.AddDirectory(pathhdf.Value); 
     zip.Save(Response.OutputStream); 
    } 

    Response.Close(); 

    Response.Redirect("Default.aspx"); /// here come my error 

Заранее спасибо

+1

Кажется, аналогичный вопрос: http://stackoverflow.com/questions/10778426/how-not-to-abort-http-response-c-sharp – Quintium

+0

спасибо, что я нашел это :) – helpme

ответ

3

После отправки содержимого HTTP вы не можете отправить заголовок перенаправления или любые другие HTTP-заголовки. В этом случае ваш HTTP-контент является вашим .zip-файлом, поэтому вы не можете отправить заголовок перенаправления после записи .zip-файла в выходной поток.

2

Вы не можете перенаправить с сервера, потому что вы не знаете! сколько времени потребуется клиенту для загрузки файла. Вы можете использовать javascript-интервал для опроса на наличие куки-файла, который мог бы испустить сервер. Вот объяснение этого nice article. После обнаружения файла cookie клиент знает, что загрузка завершена и вы можете перенаправить использование, например, window.location.href. И вот similar post.

1

Вы не можете сделать перенаправление после отправки файла. Для одного запроса может быть только один ответ, а перенаправление - ответ сам по себе.

Если вы хотите сделать как загрузку, так и перенаправление, вам необходимо отправить два запроса от клиента. Начните загрузку, затем используйте setTimeout, чтобы сделать перенаправление на Default.aspx после задержки достаточно долго, чтобы знать, что нагрузка началась. Сервер будет отвечать только на один запрос за раз, так что страница Default.aspx загрузится после завершения загрузки.

Смежные вопросы