প্রতিক্রিয়া। নতুন উইন্ডোতে পুনর্নির্দেশ


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';"/>

সার্ভারের দিকে অনক্লিক আমি একটি করি Response.Redirect("MyPage.aspx");এবং পৃষ্ঠাটি একটি নতুন উইন্ডোতে খোলা হবে।

আপনার অন্য যে অংশটি যুক্ত করতে হবে তা হ'ল ফর্মটির লক্ষ্য স্থির করা অন্যথায় প্রতিটি লিঙ্ক একটি নতুন উইন্ডোতে খুলবে। এটি করতে আপনার পপআপ উইন্ডোর শিরোনামে নিম্নলিখিতটি যুক্ত করুন।

<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 = '' ব্যবহার করে একটি অস্থায়ী সমাধান নিয়ে এসেছি;" এই পৃষ্ঠায় অন্যান্য বোতামের জন্য সম্পত্তি।
জেপিআরডি

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

কারণ প্রতিক্রিয়া edএই পুনর্নির্দেশ সার্ভারে শুরু করা হয়েছে আপনি এটি ব্যবহার করে এটি করতে পারবেন না।

আপনি যদি সরাসরি প্রতিক্রিয়া প্রবাহে লিখতে পারেন তবে আপনি এর মতো কিছু চেষ্টা করতে পারেন:

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

3
এই কাজটি, কিন্তু তারপরে যেখানে আমার বোতামটির পরিবর্তনগুলি হবে সেখানে সিএসএস বা ডিআইভিএস এর মতো প্রভাবিত হচ্ছে।
এটিয়েন

পিছনে পিছনে যাওয়ার সময় নতুন উইন্ডোটি প্রতিবার পপ আপ হয়।
devXen

26

ক্লিক ইভেন্ট হ্যান্ডলারের মাধ্যমে আপনার url তৈরি করুন:

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

তারপর:

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

পপআপ ব্লকার ইউআরএলটিকে অন্য কোনও ওয়াটকে ব্লক করে ??
রাফয়ে

3
এই উদাহরণে উইন্ডো.পেন সর্বদা 'পপআপ' হিসাবে বিবেচিত হবে যেহেতু এটি কোড দ্বারা শুরু হয়েছে এবং কোনও ব্যবহারকারী ক্রিয়া নয়। ব্যবহারকারী যখন কোনও উপাদানটিতে ক্লিক করে উইন্ডো.পেন কল করা হয়, সেটিকে ব্রাউজার দ্বারা অবরুদ্ধ পপআপ ক্রিয়াকে পাশ কাটাতে হবে।
স্টিভ

@ স্টিভ, এটি একটি দুর্দান্ত এবং খুব সহজ সমাধান। আমি প্রতিক্রিয়াতে আপনার পদ্ধতির ব্যবহার করেছি a পপআপে পুনর্নির্দেশ করুন।
সুনীল

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
এটি আমার পক্ষে ভাল কাজ করে এবং মূলত উপরে অভিষেক শ্রীবাস্তবের সমাধানটির সংক্ষিপ্ত সংস্করণ। তবে সচেতন হওয়ার জন্য বেশ কয়েকটি কেভেট রয়েছে। প্রথমত, এটি পপআপ ব্লকারকে ট্রিগার করবে। বিশেষত, সাফারি 5.0 তে এটি কিছুতেই কাজ করবে না যদি পপআপ ব্লকার সক্ষম হয়ে থাকে কারণ সাফারি আপনাকে অবরুদ্ধ পপআপগুলির জন্য অনুরোধ করে না এবং আপনাকে পপআপ ব্যতিক্রম করতে দেয় না। দ্বিতীয়ত, ক্রোম উইন্ডো.পেন-তে পৃষ্ঠার যুক্তি উপেক্ষা করে। সুতরাং আপনি window.open('page.aspx','_blank');এটি ব্যবহার করলেও এটি নতুন ট্যাবটির পরিবর্তে নেভিগেশন বারটিকে অক্ষম করে এবং এনএভি বোতামগুলি সহ একটি নতুন উইন্ডোতে এটি খুলবে।
কাসি স্পিকম্যান

8

প্রতিক্রিয়া দিয়ে এটি সম্ভব নয় the সার্ভারের দিকে যেমন ঘটে তাই পুনর্নির্দেশ করুন এবং আপনার ব্রাউজারকে সেই পদক্ষেপ নিতে নির্দেশ দিতে পারে না। প্রাথমিক উইন্ডোতে কী থাকবে? একটি ফাঁকা পাতা?


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();"/>

আমি আপনার পোস্টটি কমপক্ষে characters টি চরিত্রের মতো এডিট করতে পারছি না তবে এটি '("href")' নয়, এটি '["href"]'
নিকসো


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" />

এবং কেবল রেসপন্সকে কল করুন ed পুনঃনির্দেশ ("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 ());
     }

এই কোডটি কখনই সিএসএস ক্লাসকে প্রভাবিত করবে না তাই প্যারেন্ট উইন্ডো মোটেও প্রভাবিত হবে না !!
অভিষেক শ্রীবাস্তব

1
ভাল, এটি অবশ্যই এমভিসির পক্ষে একটি শক্ত যুক্তি। আপনার কোড থেকে কিছু দূরে নিতে হবে না। এটি থেকে দূরে। এটি এই জাতীয় জিনিস যা ওয়েবফর্মগুলি, ব্লিচকে টাইপ করে।
মিঃবোজঙ্গলস

এই কোডের সমস্তটি এক লাইনে ঘনীভূত হতে পারে ... নীচে শালুর সমাধান দেখুন। এটি হুবহু একই প্রভাব, কিন্তু সমস্ত বিনা বিন্যাস ছাড়াই।
ক্যাসি স্পিকম্যান

1

উপরে @takrl এবং @tom এর উত্তরগুলির ভিত্তিতে একটি jQuery সংস্করণ এখানে রয়েছে। দ্রষ্টব্য: কোনও হার্ডকোডযুক্ত ফর্মিড নয় (উপরে বর্ণিত এসপনেটফর্ম) এবং সরাসরি ফর্ম.আর্টরেক্ট রেফারেন্সও ব্যবহার করে না যা ফায়ারফক্স সমস্যার সম্মুখীন হতে পারে:

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

তারপরে আপনার জেএস ফাইলটিতে একই পৃষ্ঠায় উল্লেখ করা হয়েছে:

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

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

1

আমি লিংক বাটনের পরিবর্তে হাইপারলিঙ্ক ব্যবহার করেছি এবং এটি ঠিক কাজ করেছে, এটির টার্গেট সম্পত্তি রয়েছে তাই এটি আমার সমস্যার সমাধান করে। রেসপন্সের সাথে সমাধান ছিল W রাইট কিন্তু এটি আমার লেআউটটি জগাখিচুড়ি করছিল, এবং প্রতিটি রিফ্রেশ বা পিছনে স্ক্রিপ্টম্যানেজারের সাথে উইন্ডোটি আবার খোলা ছিল। সুতরাং এটিই আমি এটি সমাধান করেছি:

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

0

জাভাস্ক্রিপ্ট পৃষ্ঠা লোডে আগুন লেগেছে তা নিশ্চিত করতে আপনি পৃষ্ঠাটি ব্যবহার করতে পারেন Rআজিস্টারস্টার্টআপস্ক্রিপ্ট।


0

আমি যেমন এখানে করেছিলাম তেমন অ্যাজাক্স ব্যবহারের পিছনে আপনি এসপ নেট কোড থেকে নতুন উইন্ডো খুলতে পারেন 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;"

নতুন ব্রাউজারে খোলার জন্য আমাকে অন্য কারও প্রতিক্রিয়া জানানো হয়েছে redডাইরেক্ট কোড।


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();" />

javascript:

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

এবং কোডবিহাইন্ড:

Response.Redirect(URL); 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.