2008-12-17 42 views
23

Cách tốt nhất để đóng trang ASPX từ mã-đằng sau là gì?Trang aspx có lập trình đóng từ mã phía sau

Tôi có trình xử lý sự kiện nút mà tôi muốn đóng trang sau khi người dùng đã nhấp vào nút ASP.NET trên trang. Tôi đã thử lập trình thêm một phương thức JavaScript có chứa lệnh window.close() vào sự kiện OnClientClick để đóng trang nhưng nó không hoạt động. Nút này cũng là một asp:AsyncPostBoskTrigger cho Bảng điều khiển cập nhật AJAX.

Ứng dụng sử dụng .NET Framework 3.5.

Trả lời

8

UPDATE: tôi đã thực hiện tất cả các đầu vào của bạn và đưa ra các giải pháp sau đây:

Trong mã sau:

protected void Page_Load(object sender, EventArgs e)  
{ 
    Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();"); 
} 

Trong trang aspx:

function CloseWindow() { 
    window.close(); 
} 
+0

nó làm cho một postback, và trong lần nhấp chuột thứ hai, IE yêu cầu xác nhận để đóng trình duyệt. – Bachask8

7

Đăng lại là quá trình tải lại trang, vì vậy nếu bạn muốn trang đóng sau khi đăng lại thì bạn cần đặt window.close() javascript để chạy với sự kiện tải lên của trình duyệt trong thời gian postback đó, thường được thực hiện bằng chức năng ClientScript.RegisterStartupScript().

Nhưng bạn có chắc đây là những gì bạn muốn làm không? Đóng trang có xu hướng piss off người dùng.

4

Bạn nên tiêm tập lệnh khởi động sẽ đóng trang sau khi hoàn tất đăng lại.

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

Nó sử dụng mà dòng mã vào trang của tôi, và nó đóng cửa nó ngay lập tức. Tôi cần phải đóng trang thứ một khi người dùng nhấp vào nút điều khiển ASP.NET trên trang. –

+0

Đặt nó vào nút xử lý sự kiện onclick trong codebehind. – EndangeredMassa

42

Bạn thường làm điều gì đó như:

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

Tuy nhiên, hãy nhớ rằng những điều khác nhau sẽ xảy ra trong các cảnh tượng khác nhau. Firefox sẽ không cho phép bạn đóng cửa sổ không do bạn mở (mở bằng window.open()).

IE7 sẽ nhắc người dùng bằng hộp thoại "Trang này đang cố gắng đóng (Có | Không)".

Trong mọi trường hợp, bạn nên chuẩn bị để đối phó với cửa sổ không phải lúc nào cũng đóng!

Một sửa chữa cho 2 ở trên vấn đề là sử dụng:

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

Và tạo ra một 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> 

Lưu ý rằng close.html sẽ chuyển hướng đến default.aspx nếu cửa sổ không đóng sau 2 giây vì lý do nào đó.

2

Bạn có thể đóng một cửa sổ bằng cách đơn giản dán mã đóng cửa sổ trong sự kiện OnClientClick của nút trong đánh dấu

10
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); 
      } 

     } 
1

Đối với đóng cửa một asp.net cửa sổ ứng dụng,

  • Chỉ cần kéo một nút vào trang thiết kế
  • Sau đó viết đoạn code dưới đây đưa ra bên trong sự kiện click của nó

     " this.close(); " 
    

ví dụ:

private void button2_Click(object sender, EventArgs e) 
{ 
     this.Close(); 
} 
5

Bạn chỉ cần thêm thuộc tính này vào phần tử asp: Button (ví dụ):

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

Nó hoạt động hoàn hảo.

2

Nếu bạn sử dụng RadAjaxManager thì đây là đoạn code giúp:

RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "'; 
window.close();"); 
0
protected void Button1_Click(object sender, EventArgs e) 
    { 
    Button1.Attributes.Add("onclick"," CloseWindow();"); 
    } 

    <script type="text/javascript"> 
     function CloseWindow() 
     { 
     window.close(); 
     } 
    </script> 
+2

Vui lòng sửa định dạng mã của bạn. Cũng cung cấp văn bản để giải thích nó. – buhtz

Các vấn đề liên quan