簡體   English   中英

以編程方式從后面的代碼關閉aspx頁面

[英]Programmatically close aspx page from code behind

從代碼隱藏中關閉ASPX頁面的最佳方法是什么?

我有一個按鈕事件處理程序,我想在用戶單擊頁面上的ASP.NET按鈕后關閉頁面。 我試圖以編程方式將包含window.close()命令的JavaScript方法添加到OnClientClick事件以關閉頁面但它不起作用。 該按鈕也是AJAX更新面板的asp:AsyncPostBoskTrigger

該應用程序使用.NET Framework 3.5。

你通常會這樣做:

protected void btnClose_Click(object sender, EventArgs e)
{
    ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}

但是,請記住,不同的場景會發生不同的事情。 Firefox不會讓你關閉一個你沒有打開的窗口(用window.open()打開)。

IE7將提示用戶“此頁面正在嘗試關閉(是|否)”對話框。

無論如何,你應該准備好處理窗口而不是總是關閉!

上述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>

請注意,如果由於某種原因窗口在2秒后沒有關閉,close.html將重定向到default.aspx。

 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()函數。

但你確定這是你想做的嗎? 關閉頁面往往會惹惱用戶。

您應該注入一個啟動腳本,該腳本將在回發完成后關閉頁面。

ClientScript.RegisterStartupScript(typeof(Page), "closePage", "<script type='text/JavaScript'>window.close();</script>"); 

您只需要在asp:Button元素中添加此屬性(例如):

OnClientClick="javascript:window.close();"

它完美地運作。

如果您使用RadAjaxManager,那么這里的代碼有助於:

RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "'; 
window.close();");

您可以通過簡單地粘貼標記中按鈕的OnClientClick事件中的窗口關閉代碼來關閉窗口

對於任何想知道為什么他們無法獲得提供的答案工作的人,因為頁面必須已經通過javascript打開才能被javascript關閉。

由於大多數人發現這個asp問題可能使用asp:hyperlink或某種asp重定向導航到需要關閉的頁面。 這些重定向方法不使用javascript,因此不會通過javascript關閉。

我為我的應用程序找到了一個簡單的解決方案,它正在消除NavigateUrl並使用asp:Hyperlink.Attributesasp:Hyperlink.Attributes添加onclick ,該超鏈接使用java腳本打開需要通過javascript關閉的窗口。

aspHyperlink.NavigateUrl = "https://www.google.com";

上面的NavigateUrl已刪除,我們將附加點擊事件。

aspHyperlink.Attributes.Add("onclick", "javascript:openInNewTab('https://www.google.com');");

在包含我們的aspHyperlink的頁面后面的代碼中,我們有用於打開Rinto提供的URL的javascript

function openInNewTab(url) {
         var win = window.open(url, '_blank');
         win.focus();
     } 

現在,使用openInNewTab打開的所有頁面都可以使用提供的答案關閉。

window.close();

關閉asp.net windows應用程序,

  • 只需將按鈕拖到設計頁面即可
  • 然后在其click事件中寫下以下給定的代碼

      " this.close(); " 

即:

 private void button2_Click(object sender, EventArgs e)  
 {
        this.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>");

會做的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM