Вопрос по asp.net, c# – Response.Radirect для нового окна
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
он по-прежнему открывает его в новом окне с отключенной панелью навигации и отсутствием кнопок навигации вместо новой вкладки.
Use this code
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 ());
}
он не требует, чтобы вы что-либо делали во всплывающем окне (к которому у меня не было доступа, потому что я перенаправлял в файл PDF). Он также использует классы.
$(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);
});
});
Чтобы использовать, добавьте класс «новое окно» к любому элементу. Вам не нужно ничего добавлять к тегу body. Эта функция устанавливает новое окно и фиксирует его в той же функции.
основанная на ответах @takrl и @tom выше. Примечание: нет жестко запрограммированного formid (названного aspnetForm выше), а также не использует прямые ссылки на form.target, которые Firefox может найти проблемными:
<asp:Button ID="btnSubmit" OnClientClick="openNewWin();" Text="Submit" OnClick="btn_OnClick" runat="server"/>
Затем в вашем js-файле, указанном на той же странице:
function openNewWin () {
$('form').attr('target','_blank');
setTimeout('resetFormTarget()', 500);
}
function resetFormTarget(){
$('form').attr('target','');
}
<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/
Вам необходимо добавить следующее к вашей ссылке / кнопке на стороне сервера:
OnClientClick="aspnetForm.target ='_blank';"
Весь мой код кнопки выглядит примерно так:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
На стороне сервера OnClick я делаю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()">
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
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
вы можетеоткрыть новое окно из кода asp.net позади используя AJAX, как я сделал здесь 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);
}
чтобы вам не нужно было отправлять его обратно, вы можете использовать этот код в событии PreRender кнопки:
protected void MyButton_OnPreRender(object sender, EventArgs e)
{
string URL = "~/MyPage.aspx";
URL = Page.ResolveClientUrl(URL);
MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}
и он работал нормально, у него есть свойство 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>
поэтому я решил опубликовать свое решение. В событиях нажатия кнопки, вот код позади.
Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"
Мне пришлось изменить чужой код response.redirect, чтобы открыть его в новом браузере.
You may not have access to the code of what loads in the new window.
Even if you do, you are depending on the fact that it always loads, error free.
And you are depending on the fact that the user won't click another button before the other page gets a chance to load and run fixform.
Я бы предложил сделать это вместо этого:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
И настроить fixform наsame pageвыглядит так:
function fixform() {
document.getElementById("aspnetForm").target = '';
}