प्रतिक्रिया। नई विंडो में रीडायरेक्ट


118

मैं करना चाहता हूं Response.Redirect("MyPage.aspx")लेकिन क्या यह एक नई ब्राउज़र विंडो में खुला है। मैंने जावास्क्रिप्ट रजिस्टर स्क्रिप्ट विधि का उपयोग किए बिना यह पहले किया है। मुझे अभी याद नहीं है कि कैसे?

जवाबों:


114

मैं सिर्फ जवाब मिला और यह काम करता है :)

आपको अपने सर्वर साइड लिंक / बटन पर निम्नलिखित जोड़ना होगा:

OnClientClick="aspnetForm.target ='_blank';"

मेरा पूरा बटन कोड कुछ इस तरह दिखता है:

<asp:LinkButton ID="myButton" runat="server" Text="Click Me!" 
                OnClick="myButton_Click" 
                OnClientClick="aspnetForm.target ='_blank';"/>

सर्वर साइड में OnClick I करते हैं Response.Redirect("MyPage.aspx");और पृष्ठ एक नई विंडो में खोला जाता है।

आपको जो दूसरा हिस्सा जोड़ने की जरूरत है वह है फॉर्म का टारगेट ठीक करना अन्यथा हर लिंक एक नई विंडो में खुलेगा। ऐसा करने के लिए अपने POPUP विंडो के शीर्ष लेख में निम्नलिखित जोड़ें।

<script type="text/javascript">
    function fixform() {
        if (opener.document.getElementById("aspnetForm").target != "_blank") return;
        opener.document.getElementById("aspnetForm").target = "";
        opener.document.getElementById("aspnetForm").action = opener.location.href;
    }
</script>

तथा

<body onload="fixform()">

2
इस रूप में लक्ष्य के रूप को बदलने के लिए जावास्क्रिप्ट का उपयोग करता है। इसके बजाय पेज सामान्य के रूप में प्रस्तुत करेगा।
टोबी मिल्स

यदि आप अपनी आभासी निर्देशिका के बाहर किसी पृष्ठ पर पुनर्निर्देशित करना चाहते हैं, तो इसके अलावा आपको सुरक्षा उल्लंघन हो सकता है।
Drejc

1
किसी तरह मेरे मामले में यह काम नहीं कर रहा है। मैं नई विंडो में एक ही पेज खोल रहा हूं और उस पेज की प्रतिक्रिया लिख ​​रहा हूं। लेकिन जब मैं मास्टरपेज में फ़िक्फ़ॉर्म () विधि रखता हूँ तो यह कहता है कि दस्तावेज़ शून्य है। यकीन नहीं हो रहा है कि यह अभी भी क्यों एक समाधान खोजने की कोशिश कर रहा है। हालाँकि मैं onClientClick = "aspnetForm.target = ''" का उपयोग करके एक अस्थायी समाधान के साथ आया हूं; " उस पृष्ठ पर अन्य बटन के लिए संपत्ति।
JPReddy

1
मैंने अभी-अभी यह कोशिश की है और इसके बजाय OnClientClick="aspnetForm.target ='_blank';"मुझे इस्तेमाल करना पड़ाOnClientClick="document.getElementById('Form').target ='_blank';"
कॉलिनकैमेरॉन

हां, इसने मेरे लिए काम किया लेकिन यह नए टैब में पृष्ठ को नई विंडो में नहीं खोल रहा है। मैं अपना पृष्ठ नई विंडो में कैसे खोल सकता हूं?
शिल्पा सोनी

61

आप इसे विस्तार विधि के रूप में उपयोग कर सकते हैं

public static class ResponseHelper
{ 
    public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures) 
    { 

        if ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) && String.IsNullOrEmpty(windowFeatures)) 
        { 
            response.Redirect(url); 
        } 
        else 
        { 
            Page page = (Page)HttpContext.Current.Handler; 

            if (page == null) 
            { 
                throw new InvalidOperationException("Cannot redirect to new window outside Page context."); 
            } 
            url = page.ResolveClientUrl(url); 

            string script; 
            if (!String.IsNullOrEmpty(windowFeatures)) 
            { 
                script = @"window.open(""{0}"", ""{1}"", ""{2}"");"; 
            } 
            else 
            { 
                script = @"window.open(""{0}"", ""{1}"");"; 
            }
            script = String.Format(script, url, target, windowFeatures); 
            ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true); 
        } 
    }
}

इससे आपको वास्तविक रिस्पांस ऑब्जेक्ट पर अच्छा ओवरराइड मिलता है

Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");

1
मुझे पहले गिरफ्तारी के लिए क्या भेजना है?
रघुवीरा

यार, यह शानदार समाधान है जो वास्तव में काम करता है! धन्यवाद।
क्लॉस नजी

उत्कृष्ट पुन: प्रयोज्य समाधान! केवल नकारात्मक पक्ष यह है कि नई विंडो पॉपअप अवरोधक द्वारा अवरुद्ध है।
मीनग्रीन

पहला तर्क आपकी वर्तमान प्रतिक्रिया वस्तु है।
फ्यूचरप्रूफ

प्रतिक्रिया के लिए धन्यवाद!
सास तानसेव

26

क्योंकि Response.Redirect उस सर्वर पर शुरू किया गया है जिसे आप उसका उपयोग नहीं कर सकते।

यदि आप रिस्पांस स्ट्रीम को सीधे लिख सकते हैं तो आप कुछ इस तरह की कोशिश कर सकते हैं:

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

3
यह काम करता है, लेकिन फिर वह पृष्ठ जहां मेरे बटन में परिवर्तन हो रहे हैं, सीएसएस या डीआईवाईएस जैसे प्रभाव प्रभावित हो रहे हैं।
इटियेन

आगे और पीछे जाने पर हर बार नई विंडो खुल जाती है।
DevXen

26

क्लिक ईवेंट हैंडलर के माध्यम से अपने यूआरएल का निर्माण करें:

string strUrl = "/some/url/path" + myvar;

फिर:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);

पॉपअप ब्लॉकर इस के आसपास किसी भी अन्य यूआरएल को ब्लॉक करता है ??
रफय

3
इस उदाहरण में window.open को हमेशा a'popup 'के रूप में माना जाएगा क्योंकि यह कोड द्वारा आरंभ किया गया है न कि एक उपयोगकर्ता कार्रवाई के द्वारा। अगर window.open उस समय कहा जाता है जब उपयोगकर्ता किसी तत्व पर क्लिक करता है, तो उसे ब्राउज़र द्वारा अवरुद्ध पॉपअप कार्रवाई को रोकना चाहिए।
स्टीव

@ जल्दी करो, यह एक उत्कृष्ट और बहुत ही सरल उपाय है। मैंने Response.Redirect को एक पॉपअप में आपके दृष्टिकोण का उपयोग किया।
सुनील

14

सुधार की चाल साफ-सुथरी है, लेकिन:

  1. आपके पास नई विंडो में लोड के कोड तक पहुंच नहीं हो सकती है।

  2. यदि आप करते हैं, तो भी आप इस तथ्य पर निर्भर करते हैं कि यह हमेशा लोड, त्रुटि मुक्त होता है।

  3. और आप इस तथ्य पर निर्भर हैं कि उपयोगकर्ता दूसरे पेज को फिक्सफॉर्म को लोड करने और चलाने का मौका मिलने से पहले एक और बटन पर क्लिक नहीं करेगा।

मैं इसके बजाय ऐसा करने का सुझाव दूंगा:

OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"

और एक ही पृष्ठ पर फ़िक्फ़ॉर्म सेट करना , इस तरह दिखना :

function fixform() {
   document.getElementById("aspnetForm").target = '';
}

11

आप इस तरह से कोड के पीछे भी उपयोग कर सकते हैं

ClientScript.RegisterStartupScript(this.Page.GetType(), "",
  "window.open('page.aspx','Graph','height=400,width=500');", true);

2
यह मेरे लिए ठीक काम करता है और मूल रूप से ऊपर अभिषेक श्रीवास्तव के समाधान का लघु संस्करण है। हालांकि, वहाँ के बारे में पता करने के लिए caveats के एक जोड़े हैं। सबसे पहले, यह पॉपअप ब्लॉकर्स को ट्रिगर करेगा। विशेष रूप से, यह सफारी 5.0 में बिल्कुल भी काम नहीं करेगा यदि पॉपअप अवरोधक सक्षम है क्योंकि सफारी आपको अवरुद्ध पॉपअप के लिए संकेत नहीं देता है और आपको पॉपअप अपवाद बनाने की अनुमति नहीं देता है। दूसरा, Chrome window.open के पृष्ठ तर्क को अनदेखा करता है। तो भले ही आप इसका उपयोग करते हों, window.open('page.aspx','_blank');फिर भी इसे एक नई विंडो में नेविगेशन पट्टी के साथ खोलता है और एक नए टैब के बजाय नौ बटन गायब है।
केसी स्पीकमैन

8

यह Response.Redirect के साथ संभव नहीं है क्योंकि यह सर्वर की तरफ होता है और आपके ब्राउज़र को यह कार्रवाई करने के लिए निर्देशित नहीं कर सकता है। प्रारंभिक विंडो में क्या छोड़ा जाएगा? एक रिक्त पृष्ठ?


8

पॉपअप विधि आगंतुक को एक सुरक्षित प्रश्न देगा ।।

यहाँ मेरा सरल उपाय है: और हर जगह काम करना।

<script type="text/javascript">
    function targetMeBlank() {
        document.forms[0].target = "_blank";
    }
</script>

<asp:linkbutton  runat="server" ID="lnkbtn1" Text="target me to blank dude" OnClick="lnkbtn1_Click" OnClientClick="targetMeBlank();"/>

मैं कम से कम 6 अक्षर नहीं के रूप में yout पोस्ट को संपादित नहीं कर सकता, लेकिन यह '("href") नहीं है', यह '["href"] है
निको

6
<asp:Button ID="btnNewEntry" runat="Server" CssClass="button" Text="New Entry"

OnClick="btnNewEntry_Click" OnClientClick="aspnetForm.target ='_blank';"/>

protected void btnNewEntry_Click(object sender, EventArgs e)
{
    Response.Redirect("New.aspx");
}

स्रोत: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/


1
इसका कहना है कि aspnetForm अपरिभाषित है।
नरेश

4

यदि आप अपने कोड को पुन: संरचना कर सकते हैं ताकि आपको पोस्टबैक करने की आवश्यकता न हो, तो आप इस कोड को बटन के प्रीरेंडर इवेंट में उपयोग कर सकते हैं:

protected void MyButton_OnPreRender(object sender, EventArgs e)
{
    string URL = "~/MyPage.aspx";
    URL = Page.ResolveClientUrl(URL);
    MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}

4

नए टैब में नया पेज खोलने के लिए आप निम्न कोड का भी उपयोग कर सकते हैं।

<asp:Button ID="Button1" runat="server" Text="Go" 
  OnClientClick="window.open('yourPage.aspx');return false;" 
  onclick="Button3_Click" />

और बस Response.Redirect ("yourPage.aspx") को कॉल करें; बटन घटना के पीछे।


इस विधि दोनों से चलाता है OnClientClick के साथ-साथ onclick । इस बीच कुछ पेज नई विंडो में खोला गया है और साथ ही कुछ कार्रवाई उसी पेज में की गई है
मणिवन्नन नागराजन

3

मैं हमेशा इस कोड का उपयोग करता हूं ... इस कोड का उपयोग करें

String clientScriptName = "ButtonClickScript";
Type clientScriptType = this.GetType ();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager clientScript = Page.ClientScript;

// Check to see if the client script is already registered.
if (!clientScript.IsClientScriptBlockRegistered (clientScriptType, clientScriptName))
    {
     StringBuilder sb = new StringBuilder ();
     sb.Append ("<script type='text/javascript'>");
     sb.Append ("window.open(' " + url + "')"); //URL = where you want to redirect.
     sb.Append ("</script>");
     clientScript.RegisterClientScriptBlock (clientScriptType, clientScriptName, sb.ToString ());
     }

यह कोड CSS क्लास को कभी प्रभावित नहीं करेगा इसलिए पैरेंट विंडो बिल्कुल भी प्रभावित नहीं होगी !!
अभिषेक श्रीवास्तव

1
खैर, यह निश्चित रूप से एमवीसी के लिए एक मजबूत तर्क है। अपने कोड से कुछ भी दूर नहीं ले जाना। इससे दूर। यह इस तरह की चीजें हैं जो वेबफॉर्म, ब्लोच को टाइप करती हैं।
MrBoJangles

इस कोड के सभी को एक पंक्ति में संघनित किया जा सकता है ... नीचे शालू का समाधान देखें। यह बिल्कुल उसी तरह का प्रभाव है, लेकिन सभी अनावश्यक ब्लोट के बिना।
कासे स्पीकमैन

1

यहां ऊपर दिए गए @takrl और @tom के उत्तर के आधार पर एक jQuery संस्करण है। नोट: कोई हार्डकोड फ़ॉरमिड (जिसका नाम ऊपर aspnetForm है) और साथ ही प्रत्यक्ष फ़ॉर्म का उपयोग नहीं करता है। विशेष संदर्भ जो फ़ायरफ़ॉक्स समस्याग्रस्त हो सकता है:

<asp:Button ID="btnSubmit" OnClientClick="openNewWin();"  Text="Submit" OnClick="btn_OnClick" runat="server"/>

फिर आपकी js फ़ाइल में SAME पृष्ठ पर संदर्भित:

function openNewWin () {
    $('form').attr('target','_blank');
    setTimeout('resetFormTarget()', 500);
}

function resetFormTarget(){
    $('form').attr('target','');
}

1

मैंने लिंकबटन के बजाय हाइपरलिंक का इस्तेमाल किया और यह ठीक काम किया, इसमें टारगेट प्रॉपर्टी है इसलिए इसने मेरी समस्या हल कर दी। Response.Write के साथ समाधान था, लेकिन वह मेरे लेआउट को गड़बड़ कर रहा था, और ScriptManager के साथ हर ताज़ा या पीछे खिड़की को फिर से खोल रहा था। तो यह है कि मैंने इसे कैसे हल किया:

<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>

0

आप यह सुनिश्चित करने के लिए Page.RegisterStartupScript का उपयोग कर सकते हैं कि यह सुनिश्चित करने के लिए कि जावास्क्रिप्ट लोड हो रहा है।


0

आप यहाँ ajax का उपयोग करने के पीछे asp.net कोड से नई विंडो खोल सकते हैं जैसे मैंने यहाँ किया था http://alexandershapovalov.com/open-new-window-from-code-behind-in-aspnet-68/

protected void Page_Load(object sender, EventArgs e)
{
    Calendar1.SelectionChanged += CalendarSelectionChanged;
}

private void CalendarSelectionChanged(object sender, EventArgs e)
{
    DateTime selectedDate = ((Calendar) sender).SelectedDate;
    string url = "HistoryRates.aspx?date="
+ HttpUtility.UrlEncode(selectedDate.ToShortDateString());
    ScriptManager.RegisterClientScriptBlock(this, GetType(),
"rates" + selectedDate, "openWindow('" + url + "');", true);
}

0

पिछले किसी भी उदाहरण ने मेरे लिए काम नहीं किया, इसलिए मैंने अपना समाधान पोस्ट करने का फैसला किया। बटन क्लिक घटनाओं में, यहाँ पीछे कोड है।

Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"

मुझे किसी नए ब्राउज़र में खोलने के लिए किसी और के response.redirect कोड को संशोधित करना पड़ रहा था।


0

मैंने इस दृष्टिकोण का उपयोग किया है, इसके लिए आपको पॉपअप पर कुछ भी करने की आवश्यकता नहीं है (जो मेरे पास नहीं था क्योंकि मैं एक पीडीएफ फाइल पर रीडायरेक्ट कर रहा था)। इसमें कक्षाओं का भी उपयोग किया जाता है।

$(function () {
    //--- setup click event for elements that use a response.redirect in code behind but should open in a new window
    $(".new-window").on("click", function () {

        //--- change the form's target
        $("#aspnetForm").prop("target", "_blank");

        //--- change the target back after the window has opened
        setTimeout(function () {
            $("#aspnetForm").prop("target", "");
        }, 1);
    });
});

उपयोग करने के लिए, वर्ग "नई-विंडो" को किसी भी तत्व में जोड़ें। आपको बॉडी टैग में कुछ भी जोड़ने की जरूरत नहीं है। यह फ़ंक्शन नई विंडो सेट करता है और इसे उसी फ़ंक्शन में ठीक करता है।


0

मैंने लिंकबटन में लक्ष्य = "_ रिक्त" डालकर ऐसा किया

<asp:LinkButton ID="btn" runat="server" CausesValidation="false"  Text="Print" Visible="false" target="_blank"  />

तब कोडबेहिंद पगेलॉड में बस href विशेषता सेट करें:

btn.Attributes("href") = String.Format(ResolveUrl("~/") + "test/TestForm.aspx?formId={0}", formId)

0

एचटीएमएल

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick = "SetTarget();" />

जावास्क्रिप्ट:

function SetTarget() {
 document.forms[0].target = "_blank";}

और कोडबेहिंद:

Response.Redirect(URL); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.