zoukankan      html  css  js  c++  java
  • ASP.NET 下载文件并继续执行JS解决方法

    需求说明:当用户点击按钮时使当前按钮为不可用,并打开新页面,关闭新页面时,按钮变为可用。并且如果不关闭新页面,当前按钮过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.102Dis_projectTemp	est.pdf"
            'Session("ImagePath") = "\129.223.229.102Dis_projectTemp	est1.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.102Dis_projectTemp	est.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.102Dis_projectTemp	est1.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.102Dis_projectTemp	est1.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
  • 相关阅读:
    【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
    【项目管理和构建】——Maven下载、安装和配置(二)
    【项目管理和构建】——Maven简介(一)
    Maven 环境变量设置
    【BZOJ282】【洛谷P3829 】【SHOI2012】—信用卡凸包(凸包)
    【BZOJ1076】【SCOI2008】—奖励关(期望+状压dp)
    【BZOJ3687】—简单题(bitset)
    【BZOJ2118】—墨墨的等式(最短路+背包)
    【BZOJ4300】—绝世好题(二进制dp)
    【洛谷P3345】【ZJOI2015】—幻想乡战略游戏(动态点分治)
  • 原文地址:https://www.cnblogs.com/tylertang/p/3314400.html
Copyright © 2011-2022 走看看