जवाबों:
मैं सिर्फ जवाब मिला और यह काम करता है :)
आपको अपने सर्वर साइड लिंक / बटन पर निम्नलिखित जोड़ना होगा:
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()">
OnClientClick="aspnetForm.target ='_blank';"
मुझे इस्तेमाल करना पड़ाOnClientClick="document.getElementById('Form').target ='_blank';"
आप इसे विस्तार विधि के रूप में उपयोग कर सकते हैं
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");
क्योंकि Response.Redirect उस सर्वर पर शुरू किया गया है जिसे आप उसका उपयोग नहीं कर सकते।
यदि आप रिस्पांस स्ट्रीम को सीधे लिख सकते हैं तो आप कुछ इस तरह की कोशिश कर सकते हैं:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
क्लिक ईवेंट हैंडलर के माध्यम से अपने यूआरएल का निर्माण करें:
string strUrl = "/some/url/path" + myvar;
फिर:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
सुधार की चाल साफ-सुथरी है, लेकिन:
आपके पास नई विंडो में लोड के कोड तक पहुंच नहीं हो सकती है।
यदि आप करते हैं, तो भी आप इस तथ्य पर निर्भर करते हैं कि यह हमेशा लोड, त्रुटि मुक्त होता है।
और आप इस तथ्य पर निर्भर हैं कि उपयोगकर्ता दूसरे पेज को फिक्सफॉर्म को लोड करने और चलाने का मौका मिलने से पहले एक और बटन पर क्लिक नहीं करेगा।
मैं इसके बजाय ऐसा करने का सुझाव दूंगा:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
और एक ही पृष्ठ पर फ़िक्फ़ॉर्म सेट करना , इस तरह दिखना :
function fixform() {
document.getElementById("aspnetForm").target = '';
}
आप इस तरह से कोड के पीछे भी उपयोग कर सकते हैं
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
फिर भी इसे एक नई विंडो में नेविगेशन पट्टी के साथ खोलता है और एक नए टैब के बजाय नौ बटन गायब है।
पॉपअप विधि आगंतुक को एक सुरक्षित प्रश्न देगा ।।
यहाँ मेरा सरल उपाय है: और हर जगह काम करना।
<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();"/>
<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/
यदि आप अपने कोड को पुन: संरचना कर सकते हैं ताकि आपको पोस्टबैक करने की आवश्यकता न हो, तो आप इस कोड को बटन के प्रीरेंडर इवेंट में उपयोग कर सकते हैं:
protected void MyButton_OnPreRender(object sender, EventArgs e)
{
string URL = "~/MyPage.aspx";
URL = Page.ResolveClientUrl(URL);
MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}
नए टैब में नया पेज खोलने के लिए आप निम्न कोड का भी उपयोग कर सकते हैं।
<asp:Button ID="Button1" runat="server" Text="Go"
OnClientClick="window.open('yourPage.aspx');return false;"
onclick="Button3_Click" />
और बस Response.Redirect ("yourPage.aspx") को कॉल करें; बटन घटना के पीछे।
मैं हमेशा इस कोड का उपयोग करता हूं ... इस कोड का उपयोग करें
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 ());
}
यहां ऊपर दिए गए @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','');
}
मैंने लिंकबटन के बजाय हाइपरलिंक का इस्तेमाल किया और यह ठीक काम किया, इसमें टारगेट प्रॉपर्टी है इसलिए इसने मेरी समस्या हल कर दी। 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>
आप यहाँ 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);
}
पिछले किसी भी उदाहरण ने मेरे लिए काम नहीं किया, इसलिए मैंने अपना समाधान पोस्ट करने का फैसला किया। बटन क्लिक घटनाओं में, यहाँ पीछे कोड है।
Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"
मुझे किसी नए ब्राउज़र में खोलने के लिए किसी और के response.redirect कोड को संशोधित करना पड़ रहा था।
मैंने इस दृष्टिकोण का उपयोग किया है, इसके लिए आपको पॉपअप पर कुछ भी करने की आवश्यकता नहीं है (जो मेरे पास नहीं था क्योंकि मैं एक पीडीएफ फाइल पर रीडायरेक्ट कर रहा था)। इसमें कक्षाओं का भी उपयोग किया जाता है।
$(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);
});
});
उपयोग करने के लिए, वर्ग "नई-विंडो" को किसी भी तत्व में जोड़ें। आपको बॉडी टैग में कुछ भी जोड़ने की जरूरत नहीं है। यह फ़ंक्शन नई विंडो सेट करता है और इसे उसी फ़ंक्शन में ठीक करता है।
मैंने लिंकबटन में लक्ष्य = "_ रिक्त" डालकर ऐसा किया
<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)
एचटीएमएल
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick = "SetTarget();" />
जावास्क्रिप्ट:
function SetTarget() {
document.forms[0].target = "_blank";}
और कोडबेहिंद:
Response.Redirect(URL);