2013-05-21 2 views
0

У меня есть веб-страница со ссылками на некоторые PDF-файлы, например. http://www.someurl.com/somefolder/filename.pdf.Заставить гиперссылку открывать в новом окне, используя context.Response

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

У меня есть ограниченный доступ/контроль над кодом и не могу поместить атрибут target=_blank в href или добавить javascript. Код, который загружает после аутентификации, как показано ниже:

string filename = Path.GetFileName(context.Request.PhysicalPath); 

FileStream MyFileStream; 
long FileSize; 

string strMapPath = context.Server.MapPath(filename); 
MyFileStream = new FileStream(strMapPath, FileMode.Open); 
FileSize = MyFileStream.Length; 

//Allocate size for our buffer array 
byte[] Buffer = new byte[(int)FileSize]; 
MyFileStream.Read(Buffer, 0, (int)FileSize); 
MyFileStream.Close(); 

//Do buffer cleanup 
context.Response.Buffer = true; 
context.Response.Clear(); 

//Add the appropriate headers 
context.Response.AddHeader("content-disposition", 
"attachement filename=" + filename); 

//Add the right contenttype 
context.Response.ContentType = "application/pdf"; 

//Stream it out via a Binary Write 
context.Response.BinaryWrite(Buffer); 

Можем ли мы заставить context.Response открыть в новом окне?

+0

Почему не Response.WriteFile? –

+0

Почему вы не можете использовать target = _blank. Можете ли вы объяснить мне причину. Я думаю, использование HTTP-обработчика решит вашу цель. – suryakiran

+0

не могли бы вы привести пример, как Response.WriteFile откроет ссылку в новом окне? спасибо – rumi

ответ

3

Открытие нового окна является действием на стороне клиента, тогда как Context.Response является командой на стороне сервера. Чтобы открыть новое окно, вам нужно будет что-то сделать на стороне клиента.

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

Единственное хорошее решение для этого - изменить исходную страницу, чтобы добавить всплывающий скрипт либо с помощью target="_blank", либо с помощью скрипта, который добавляет обработчик onclick к ссылке. Оба они говорят, что вы не можете этого сделать.

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