2012-01-24 12 views
6

Nie muszę koniecznie używać response.redirect, ale to właśnie miałem. Chciałbym otworzyć wybrany link w nowym oknie. Jak mogę to zrobić?Jak używać Target = _blank w pliku response.redirect?

context.Response.Redirect(ConfigurationManager.AppSettings["URL"] + ext); 
+2

możliwe duplikat: [http://stackoverflow.com/questions/104601/asp-net-response-redirect-to -new-window] – perfectionist

Odpowiedz

12

Nie można podać krótkiej odpowiedzi. Przeglądarka jest jedyną rzeczą, która może otworzyć nowe okno.

Co możesz zrobić, to wysłać kawałek html w odpowiedzi, która ma link do twojego URL-a, jako href, target = "_ blank" i fragment javascriptowego pliku formularza, który zepsuje kliknięcie. Jeśli to nie zadziała, użyj window.open (url);

response.write("<script>"); 
response.write("window.open('page.html','_blank')"); 
response.write("</script>"); 
+0

to nie działa na mojej stronie. Proszę pomóc – DharaPPatel

+0

Czy możesz dodać kod, aby pokazać, co robisz? –

4

Próbujesz wykonać zadanie po stronie klienta od strony serwera, więc musisz zrobić trochę hakowania.

Jedna opcja odsyła stronę, która jest po prostu odrobiną skryptu JavaScript, który następnie obsłuży przekierowanie.

To nie jest szczególnie czysty, ale co:

Response.Write("<script>window.open('http://www.somesite.com/','_blank');</script>"); 
+1

A co z blokadami popupów? – GlennG

+0

Generuje to błąd potencjalnie niebezpiecznej wartości Request.Path został wykryty przez klienta, – TheAlbear

1

Nie można tego zrobić z Response.Redirect()

Cóż można to zrobić za pomocą prostego Javascript wewnątrz Response.Write

Response.Write("<script>window.open('page.html','_blank')</script>"); 
0

Jeśli rozumiem to poprawnie, chcesz mieć możliwość otwierania przekierowanego adresu URL w nowym oknie, ale prawdopodobnie zachowujesz pierwotny cel w tym samym okno.

Niestety nie można tego zrobić, ponieważ przekierowanie jest obsługiwane przez serwer, a nie przez przeglądarkę. Możesz potencjalnie przekierować na stronę zawierającą skrypt, który otworzył nowe okno w oparciu o parametr zapytania o URL. Ale to by się otworzyło na XSS, jeśli nie jesteś ostrożny.

0

Co powiesz na hiperłącze, które programujesz dymicznie? Wyobraź to sobie. link asp, który po kliknięciu otwiera nowe okno, prawdopodobnie bez pasków przewijania, bez paska adresu, czegokolwiek chcesz. Oto przykład:

hyperlink1.Attributes.Add("onclick", "window.open(http://www.mylink.com?sessionvar1=" + someValue + "',null,'height=251px, width=600px,status=no, resizable=no, scrollbars=no, toolbar=no,location=no,menubar=no ');"); 

To jest tylko alternatywa dla standardowego przycisku, który w innym przypadku wywołałby obsługę kliknięcia. Pamiętaj, że możesz dodać całą rzecz od przodu jako atrybut.

1

Jeśli tylko obsługa nawigacji można spróbować asp: hiperłącza kontrolę zamiast przycisku, w ten sposób cel jest określony w przeglądarce, gdy strona jest renderowane:

protected void Page_Load (object sender, EventArgs e) 
{ 
    lnkViewPage.NavigateURL = sURL; 
    lnkViewPage.Target = "_blank"; 
} 

Oczywiście jest to bardziej grzeczny, aby opuścić .Target sam, ponieważ w tym przypadku hiperłącze można kliknąć prawym przyciskiem myszy, a "otwórz w nowej karcie/stronie" będzie dostępne z menu kontekstowego.

2

Użyj właściwość OnClientClick przez Buttona:

<asp:Button runat="server" ID="cmd_Test" onclientclick="window.open('YourUrl')" /> 
0

Używam tego kodu do przekierowania:

Response.Write ("okno.open ('http://www.whatever.com', '_ blank') < "+"/script> ");

Znacznik końcowy musi być sformatowany < "+"/ script>

0

dodałem do odpowiedzi @DaveWalker:

Response.Write("<script>") 
Response.Write("window.open('NewPage.aspx','_blank','resizable=yes,scrollbars=yes,toolbar=yes,menubar=yes,location=no')") 
Response.Write("</script>") 

To stworzy popup zamiast otwierania nowego kartę.

-1
SqlConnection con = new SqlConnection("Data Source=.; uid=sa; pwd=sandesh;database=BeautyJunction;"); 
     string strSQL = "Select BenificiaryType,BenificiaryName,DisttCode,IFSC,AC_No from BenificiaryMaster"; 
     SqlDataAdapter dt = new SqlDataAdapter(strSQL, con); 
     DataSet ds = new DataSet(); 
     dt.Fill(ds, "UserDetail"); 
     string dat = String.Format("{0: MM_dd_yyyy}", DateTime.Now); 
     //string dat = Convert.ToString(DateTime.UtcNow.ToShortDateString()); 
     sb.Append("~/Folder1/BenificiaryMaster_file_1" + dat + ".xml"); 
     string path = sb.ToString(); 
     ds.WriteXml(Server.MapPath(path)); 
     LabelMessage.Text = "Your XML file has Been created with name 'BenificiaryMaster_file_1" + dat +"' <a target='_blank' href=Folder1/BenificiaryMaster_file_1.xml>click here</a> to show Benificiary record file"; 
     //GridView1.DataBind(); 
+0

, starając się napisać odpowiedź tak, aby łatwo było im zrozumieć – Chella

0

Widziałem wielu anwersów i nikt naprawdę nie pracuje dla mnie. Próbowałem więc następującego kodu i rozwiązał on mój problem:

Najpierw zmieniłem przycisk mt za pomocą przycisku linku z tym samym aspektem co przycisk.

<asp:LinkButton ID="btPrint" runat="server" class="btn btn-primary"><span class="glyphicon glyphicon-print"></span> Print</asp:LinkButton> 

Następnie dodaję następujących w moim kod.

btPrint.Attributes.Add("href", String.Format("printPage.aspx?&id={0}", txtId.Text)); 
btPrint.Attributes.Add("target", "_blank"); 
0

To działa na mnie

Na kodu aspx:

<a id="myLink" target="_blank" onclick="window.open('ExamplePage.aspx, '_blank');">Link To A Page And Open Other Tab</a> 
Powiązane problemy