Как предотвратить открытие обратных передач в новом окне после нажатия LinkButton с target=_blank?

Вывод. У меня есть GridView с TemplateField, содержащим только ASP.NET LinkButton. Мой LinkButton выглядит так:

<asp:LinkButton ID="lbDoc" runat="server" OnClientClick="document.forms[0].target ='_blank';" OnCommand="ProcessRequest" Text='<%# Eval("Title").ToString() %>' CommandArgument='<%# Eval("ID").ToString() %>' />

Обратите внимание на свойство CommandArgument и OnCommand элемента управления. Каждая кнопка должна выполнять некоторую обработку на стороне сервера, в зависимости от CommandArgument, и в конечном итоге перенаправлять и отображать PDF-файл в новом окне. ВАЖНО: я не просто ссылаюсь на URL-адрес PDF, поэтому я не могу использовать элемент управления HyperLink или простой тег привязки. Обработка на стороне сервера является ключевой и необходимой.

Проблема: во время выполнения, когда пользователь нажимает одну из кнопок LinkButton, PDF-файл загружается по желанию в новом окне, однако все обратные передачи после этого также загружаются в новой вкладке/окне браузера. . У меня есть DropDownLists (с AutoPostback), которые запрашивают и повторно связывают мой GridView - если пользователь выбирает другие параметры фильтра в этих DropDownList после нажатия на одну из кнопок LinkButton, результаты отправляются обратно в новую вкладку/окно браузера. Вот в чем проблема — пользователь получит беспорядок из вкладок/окон.

Что я пробовал Пользователь Pow-Ian описал ту же проблему здесь, но предложенное решение Javascript помогло не работает для меня. Я пробовал решение на чистом JavaScript, такое как это, но оно также не работает. Он отобразит target='_blank' в результирующем теге, но по какой-то причине не обработает ссылку в новой вкладке браузера.

Какие-либо предложения?


person lunchroom    schedule 24.06.2015    source источник
comment
Вы упомянули, что не можете использовать тег привязки, я немного не понимаю этого, похоже, вы полагаетесь только на значение из commandArgument для создания URL-адреса ссылки в формате PDF, так почему якорь не может это сделать? это может быть что-то вроде этого: ‹a href=pdf.aspx?id=‹%# Eval(id) %› target=_blank›Загрузка в новом окне‹/a›, логика в обработчике события ProcessRequest может быть перенесена в pdf.aspx. я ничего не пропустил?   -  person Kane Wang    schedule 25.06.2015
comment
Кейн. К сожалению, я не только полагаюсь на значение из commandArgument для создания URL-адреса ссылки в формате PDF. Как я уже сказал, я не просто ссылаюсь на URL-адрес PDF. Обработка на стороне сервера является ключевой. Я выполняю несколько операций на стороне сервера перед потоковой передачей PDF-файла в браузер. Кроме того, я не хочу, чтобы пользователь мог поделиться ссылкой или добавить ее в закладки, используя параметр строки запроса, как вы предложили.   -  person lunchroom    schedule 25.06.2015
comment
Должно быть много способов защитить URL-адрес, например, добавление токена, срок действия которого истекает через 15 минут, в качестве параметра в URL-адресе, таким образом, даже URL-адрес виден пользователю, он не может просто использовать его позже. Если бы весь процесс можно было выполнить независимо от родительской страницы, я думаю, что я все еще могу использовать привязку.   -  person Kane Wang    schedule 26.06.2015
comment
Огромное спасибо Аттерсу. Это предложение решило мою проблему.   -  person lunchroom    schedule 01.07.2015


Ответы (1)


Добавьте следующий код, чтобы предотвратить обратную отправку.

lbDoc.Attributes.Add("onclick","return false;");
person Patrick    schedule 28.11.2015