Каков наилучший способ закрыть страницу ASPX из code-behind?
У меня есть обработчик событий кнопки, который я хочу закрыть страницу после того, как пользователь нажмет кнопку ASP.NET на странице. Я пытался программно добавить метод JavaScript, содержащий команду window.close()
в событие OnClientClick
для закрытия страницы, но это не работает. Кнопка также является asp:AsyncPostBoskTrigger
для панели обновления AJAX.
Приложение использует .NET Framework 3.5.
Как правило, сделать что-то вроде:
в
protected void btnClose_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}
Однако, имейте в виду, что различные вещи произойдут в различные scenerios. В Firefox выиграл'т позволю тебе закрыть окно, что это'т вы открыли (открыл окно.открыть()`).
ИЕ7 будет запрашивать у пользователя с "Эта страница пытается закрыть (Да | нет)" и диалог.
В любом случае, вы должны быть готовы иметь дело с окна не всегда закрываются!
Одним из способов исправить на 2 выше проблем является использование:
в
protected void btnClose_Click(object sender, EventArgs e) {
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.open('close.html', '_self', null);", true);
}
И создать close.html:
<html><head>
<title></title>
<script language="javascript" type="text/javascript">
var redirectTimerId = 0;
function closeWindow()
{
window.opener = top;
redirectTimerId = window.setTimeout('redirect()', 2000);
window.close();
}
function stopRedirect()
{
window.clearTimeout(redirectTimerId);
}
function redirect()
{
window.location = 'default.aspx';
}
</script>
</head>
<body onload="closeWindow()" onunload="stopRedirect()" style="">
<center><h1>Please Wait...</h1></center>
</body></html>
Обратите внимание, что close.html приведет к дефолту.aspx, если окно не закрывается через 2 сек по какой-то причине.
protected void btnOK_Click(object sender, EventArgs e)
{
// Your code goes here.
if(isSuccess)
{
string close = @"<script type='text/javascript'>
window.returnValue = true;
window.close();
</script>";
base.Response.Write(close);
}
}
ОБНОВЛЕНИЕ: Я учел все ваши пожелания и пришел к следующему решению:
В коде сзади:
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();");
}
В странице aspx:
function CloseWindow() {
window.close();
}
Постбэк - это процесс повторной загрузки страницы, поэтому если вы хотите, чтобы страница закрылась после постбэка, вам нужно установить свой сценарий window.close() javascript для запуска при событии onload браузера во время постбэка, обычно это делается с помощью функции ClientScript.RegisterStartupScript()
.
Но уверены ли вы, что это то, что вы хотите сделать? Закрытие страниц обычно раздражает пользователей.
Вы должны внедрить сценарий запуска, который закроет страницу после завершения postback.
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "<script type='text/JavaScript'>window.close();</script>");
Вам просто нужно добавить это свойство в элемент ASP:кнопка (например):
OnClientClick="javascript:window.close();"
Он отлично работает.
Если вы используете RadAjaxManager, то вот код, который помогает:
RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "';
window.close();");
Вы можете закрыть окно, просто вставив код в окне закрытие кнопка'ы событие OnClientClick в разметке
Для тех, кто интересно, почему они не могут получить ответы на предоставленные работы это's, потому что страница должна быть открыта с помощью JavaScript для того, чтобы быть закрыт с помощью JavaScript.
Поскольку большинство людей находят этот вопрос скорее всего будет использоваться АСП АСП:гиперссылка
или ASP редирект какой-то, чтобы перейти на страницу, которая должна быть закрыта. Эти методы перенаправления Дон'т использовать JavaScript и поэтому не будет закрывать на JavaScript.
Я нашел простое решение для моего приложения и что'ы исключения navigateurl свойство
и через АСП:гиперссылка.Атрибуты, чтобы добавить
щелчку` в гиперссылку, которая использует Java скрипт, чтобы открыть окно, которое нужно закрыть с помощью JavaScript.
aspHyperlink.NavigateUrl = "https://www.google.com";
Выше navigateurl свойство удаляется, а вместо этого мы придаем наши события click.
aspHyperlink.Attributes.Add("onclick", "javascript:openInNewTab('https://www.google.com');");
И в коде страницы, содержащей наши aspHyperlink у нас есть JavaScript для открытия URL-адрес, предоставленный Rinto
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
Теперь все страницы открыты с openInNewTab могут быть закрыты с представленными ответами.
window.close();
protected void Button1_Click(object sender, EventArgs e)
{
Button1.Attributes.Add("onclick"," CloseWindow();");
}
<script type="text/javascript">
function CloseWindow()
{
window.close();
}
</script>
Вы можете просто использовать это.. короткое и простое.
Response.Write("<script>window.close();</script>");
Надеюсь, что это помогает.
если вы открываете страницу на JavaScript всплывающее окно тогда
Response.Write("<script>javascript:window.close();</script>");
будет делать эту работу
Для закрытия asp.net приложения Windows,
" эта.закрыть(); "и
т. е.:
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}