需求说明:当用户点击按钮时使当前按钮为不可用,并打开新页面,关闭新页面时,按钮变为可用。并且如果不关闭新页面,当前按钮过10秒钟自动变为可用。
包含3个页面:
一、按钮页
前台代码:当刷新后采用js进行disable后,点击的时候也可以用JS使其为disable,让整个过程都disable。(如果采用的是后台button.Enable=false,则不行,因为服务器端状态始终为false,导致按钮只能用一次。)
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <script type="text/javascript" language="javascript"> function disableButton(button) { var btn = document.getElementById(button); setTimeout(function () {disable_in(btn); },10000); } function disable_in(button) { button.disabled=false; } function Enablebutton(buttonID) { var button = document.getElementById(buttonID); button.disabled = false; } function NotEnablebutton(buttonID) { var button = document.getElementById(buttonID); button.disabled = true; } function disable_out(button) { button.disabled = true; } // function disableButton_Out(button) { // setTimeout(function () { disable_out(button); }, 50); // } </script> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="disable_out(this);"/> <asp:Button ID="Button2" runat="server" Text="Button2" UseSubmitBehavior="false" OnClientClick="disable_out(this);"/> </div> </form> </body> </html>
后台代码:
这里用服务器端 Button1.Enabled = False代码, 当用JS还原为可用时,服务器端状态不会改变,因此多个按钮点击时会出现bug(点击第二个按钮时,第一个按钮会一起变为不可用)。所以这里将用js设置为不可用状态。
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Session("ImagePath") = "\\129.223.229.102\Dis_project\Temp\test.pdf" 'Session("ImagePath") = "\\129.223.229.102\Dis_project\Temp\test1.zip" Session("CurrentButtonID") = Button1.ClientID Session("IsPDF") = True System.Threading.Thread.Sleep(100) ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript1", String.Format("<script>disableButton('" & Button1.ClientID & "')</script>"))
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript2", String.Format("<script>NotEnablebutton('" & Button1.ClientID & "');</script>")) ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", String.Format("<script>window.open('ShowPDF.aspx')</script>")) 'Button1.Attributes.Add("OnClientClick", String.Format("javascript:disableButton_Out(this);")) 'Button1.Enabled = False End Sub
二、下载(显示)页面
前台代码:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ShowPDF.aspx.vb" Inherits="ShowPDF" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>ShowPDF</title> </head> <body> <form id="form1" runat="server"> <%--<script type="text/javascript" language="javascript"> window.onbeforeunload = closingCode; function closingCode() { opener.Enablebutton(); } </script>--%> <%--<% GetPDF1()%>--%> <iframe src="Default3.aspx" width="100%" height="100%"> </iframe> </form> </body> </html>
后台代码:
Imports System.Net Partial Class ShowPDF Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim js As String = "" Dim buttonid As String = "" If Not Session("ImagePath") Is Nothing AndAlso Not Session("CurrentButtonID") Is Nothing Then buttonid = Session("CurrentButtonID").ToString() js = "<script>window.onbeforeunload = closingCode;function closingCode() {opener.Enablebutton('" + buttonid + "');}</script>" 'js = String.Format("<script>window.onbeforeunload = closingCode;function closingCode() {opener.Enablebutton('{0}');}</script>", "Button1") Response.Write(js) 'write the enable parent button'js End If End Sub Public Sub ShowPDFfile() Dim str As String = "" If Not Session("ImagePath") Is Nothing Then str = String.Format("<object data=""\\129.223.229.102\Dis_project\Temp\test.pdf"" type=""application/pdf"" width=""100%"" height=""100%""><p>It appears you don't have a PDF plugin for this browser.No biggie... you can <a href=""em.pdf"">click here todownload the PDF file.</a></p></object>") End If Response.Write(str) End Sub Public Sub GetPDF(ByVal path As String) 'Dim path As String = Server.MapPath(Spath) Dim client As New WebClient() Dim buffer As [Byte]() = client.DownloadData(path) If buffer IsNot Nothing Then Response.ContentType = "application/pdf" Response.AddHeader("content-length", buffer.Length.ToString()) Response.BinaryWrite(buffer) Response.Flush() Response.End() End If End Sub Protected Sub DownloadFile(ByVal fileName As String) '20110905 Test Export with SSL using IE 7 Dim s_path As String = fileName 'HttpContext.Current.Server.MapPath("~/") + Dim file As System.IO.FileInfo = New System.IO.FileInfo(s_path) Response.ClearHeaders() HttpContext.Current.Response.ContentType = "application/ms-download" HttpContext.Current.Response.Charset = "utf-8" Response.AddHeader("Content-Disposition", "inline; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)) 'inline HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString()) Response.AddHeader("Pragma", "public") Response.AddHeader("Cache-Control", "max-age=0") Response.Flush() HttpContext.Current.Response.WriteFile(file.FullName) HttpContext.Current.Response.Flush() 'HttpContext.Current.Response.Clear() HttpContext.Current.Response.End() End Sub Public Sub GetPDF1() Dim fileName As String = "\\129.223.229.102\Dis_project\Temp\test1.pdf" Response.ContentType = "application/pdf" Response.Clear() Response.TransmitFile(fileName) Response.End() End Sub End Class
三、框架中的真正的下载(显示页面),显示在框架中
前台代码:
后台代码:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim fileName As String = "" If Not IsPostBack Then If Not Session("ImagePath") Is Nothing AndAlso Not Session("CurrentButtonID") Is Nothing Then fileName = Session("ImagePath").ToString() GetPDF1(fileName) End If End If End Sub Public Sub GetPDF1(ByVal fileName As String) 'Dim fileName As String = "\\129.223.229.102\Dis_project\Temp\test1.pdf" If Session("IsPDF") = False Then Response.ContentType = "application/zip" Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)) Else Response.ContentType = "application/pdf" End If Response.Clear() Response.TransmitFile(fileName) Response.End() End Sub