2016-01-20 4 views
0

У меня есть код, который работает с библиотекой EPPlus, чтобы модифицировать некоторые данные из dt в файл excel, который он сам присоединяет, и отправляет электронное письмо, а также загружает этот файл клиенту, отправляющему его.Response Перенаправление не работает после отправки электронной почты

Однако из следующего метода onClick он ничего не делает, кроме SendModFile(), я думаю, что текст и прочее нуждаются в обратной передаче, поэтому он не меняется, что я могу отнять, но я должен отключить кнопку для процесс не отправлять больше одного адреса электронной почты и перенаправлять в главное меню, как я могу это сделать.

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Label1.Visible = True 
    Button2.Enabled = False 
    Label1.Text = "Sending..." 

    SendModFile() 
    Label1.Text = "Sent" 

    Response.Redirect("~/Main.aspx") 
End Sub 

Edit: Это конец SendModFile(), который позволяет загрузить файл после отправки электронной почты, есть способ, чтобы оптимизировать это, я считаю, что эта часть является один портя из-за ответ. End()

Response.Clear() 
Response.Buffer = True 
Response.ContentType = "application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
Response.AppendHeader("content-disposition", "attachment; filename=ExcelFileName.xlsx") 
Response.BinaryWrite(memStream2.ToArray()) 
Response.End() 
+0

Выполняется ли эта строка 'Label1.Text =" Sent "'? – Rahul

ответ

2

Когда вы звоните Response.End, это конец ответа. Вы не можете сделать перенаправление.

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

+0

Или используйте 'Server.Transfer()' – Rahul

+0

Я также пробовал использовать server.transfer, ничего не делает грустно, @mason не должен resp'se.end действовать как конец процесса (SendModFile()) не вся funtionality? –

+0

@JavierM Я связан с документацией. В принципе, если вы вызываете Response.End, вам нужно сделать запись ответа. Вы попробовали мой обход? – mason