主頁 > 企業開發 > 用于檔案處理的ASP.NET頁面,在程式開始之前無法獲取要呈現的加載GIF

用于檔案處理的ASP.NET頁面,在程式開始之前無法獲取要呈現的加載GIF

2022-02-22 12:38:23 企業開發

我有一個 webforms 應用程式,它使用一個典型的檔案下載器頁面,可以從我的應用程式中的許多地方訪問。在正常情況下,頁面提供檔案,關閉,用戶甚至不知道它存在。但是,我添加了一個 PDF 轉換工具,可以將某些檔案轉換為 PDF,此程序需要幾秒鐘,因此最終用戶會看到該頁面,我對此表示滿意。

我正在嘗試向頁面添加一些簡單的文本和“正在加載”的 GIF,但在頁面加載事件開始并阻止頁面呈現之前,我無法讓它呈現。

我有一個簡單的頁面加載事件來決定運行什么程式。

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim Type As String = Request.QueryString("Type")
        If Type = "File" Then
            'TODO
        ElseIf Type = "DB" Then
            OpenDBFile()
        ElseIf Type = "QCBDBYMCSID" Then
            OpenQCBD("BYMCSID")
        ElseIf Type = "QCBDBYNAME" Then
            OpenQCBD("BYNAME")
        Else
            'TODO
        End If
    End If
End Sub

我試圖通過在頁面生命周期后期用一個事件替換 Me.Load 來延遲這一點,比如 Me.SaveStateComplete 并且沒有任何變化。

在客戶端,我嘗試了幾個不同的選項,使用和更新面板、一個 UpdateProgress 和一個使用 CSS 設定背景影像而不是影像標簽的普通 DIV,但沒有顯示任何內容。

這是我嘗試過的兩個示例。

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" >
        <ContentTemplate>
            <div style="text-align: center">
                <h1 style="text-align: center;">MCS File Downloader</h1>
                <asp:Image ID="Image2" ImageAlign="Middle" ImageUrl="~/MyPictures/colorchangearrowdown.gif" runat="server" />
                <h3 runat="server" id="h3Text" style="text-align: center">Processing File...</h3>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>


<asp:UpdateProgress ID="prgLoadingStatus" runat="server" DynamicLayout="true">
            <ProgressTemplate>
                <div id="overlay">
                    <div id="modalprogress">
                        <div id="theprogress">
                            <h1 style="text-align: center;">MCS File Downloader</h1>
                            <asp:Image ID="imgWaitIcon" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/MyPictures/colorchangearrowdown.gif" />
                            <h3 runat="server" id="h3Text" style="text-align: center">Processing File...</h3>
                        </div>
                    </div>
                </div>
            </ProgressTemplate>
        </asp:UpdateProgress>

任何幫助將不勝感激!

uj5u.com熱心網友回復:

好吧,你不能關閉,或隱藏,或者任何代碼后面的東西。你點擊一個按鈕,頁面就會被發送到服務器。然后運行后面的代碼,然后將頁面發送回。

后面的代碼永遠不會直接與用戶互動。頁面回發將整個頁面發送到服務器。當后面的代碼運行時,它可以修改控制元件、文本框等。但是,用戶看到的都是零,直到后面的所有代碼都完成了,然后整個頁面讓它回到客戶端,重新加載,JavaScrip重新運行,然后顯示頁面。因此,亂搞各種服務器端代碼是 100% 的浪費時間,而且是徒勞的。

然而,通過對頁面生命周期和回傳(所謂的往返)的簡單掌握,一些解決方案變得容易 - 實際上在這里非常容易。

所以,無論你想做什么?說點擊一個按鈕?然后添加客戶端事件和服務器端事件。

客戶端現在可以顯示微調器(影片 gif)或其他任何內容。事實上,在 99% 的情況下,您不需要任何代碼來隱藏該微調器或其他任何東西,因為所有服務器端代碼何時完成?好吧,一個全新的網頁副本從服務器上飛速下載,因此您可以免費重新繪制和重新加載整個頁面 - 包括您的隱藏微調器/gif 現在被隱藏了。

所以,在最簡單的層面上,在一個空白的新測驗頁面上嘗試這段代碼:

你不需要花哨的代碼,你不需要執行緒,你不需要太多任何東西。(但您確實需要簡單地掌握頁面回發的作業原理)。

因此,我們將在網頁上放置一個按鈕。我們將點擊那個按鈕,我們有一個長時間運行的服務器端按鈕代碼(比如 5 秒)。當后面的代碼完成后,微調器將消失。

所以,我們有這個標記:一個按鈕,然后是影片“gif”微調器:

       <div id="MySpinner" runat="server" style="display:none">
            <img src="Content/wait2.gif" />
        </div>


        <div id="MyGrid" runat="server" style="width:50%">
            <asp:GridView ID="GridView1" runat="server" CssClass="table"></asp:GridView>
        </div>

        <asp:Button ID="cmdLoadGrid" runat="server" Text="Load data" CssClass="btn"
            OnClientClick="ShowSpinner();return true;" />


    </div>

        <script>

            function ShowSpinner() {
                $("#MySpinner").show();

            }

        </script>

請注意我如何將微調器隱藏在 div 中(顯示:無)。

注意我們有一個平面簡按鈕,但它也有一個客戶端點擊事件。

后面的代碼是這樣的

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 處理 Me.Load

End Sub

Protected Sub cmdLoadGrid_Click(sender As Object, e As EventArgs) Handles cmdLoadGrid.Click

    Thread.Sleep(4000)       ' fake a big delay

    Dim strSQL As String = "SELECT TOP 6 ID, FirstName, LastName, HotelName, City, Description from tblHotels
                            WHERE Description is not null"

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)

            conn.Open()
            GridView1.DataSource = cmdSQL.ExecuteReader
            GridView1.DataBind()

        End Using
    End Using

    '' hide the spinner
    'MySpinner.Style("Display") = "none"
    'MyGrid.Style("Display") = "normal"

End Sub

所以我投入了 4 秒的“假”延遲。

所以,頁面看起來像這樣:

用于檔案處理的 ASP.NET 頁面,在程式開始之前無法獲取要呈現的加載 GIF

如果我點擊按鈕,我們會看到:

用于檔案處理的 ASP.NET 頁面,在程式開始之前無法獲取要呈現的加載 GIF

然后當服務器代碼完成后,它會發回整個頁面,我現在看到了:

用于檔案處理的 ASP.NET 頁面,在程式開始之前無法獲取要呈現的加載 GIF

請注意,我什至不必“隱藏”微調器 gif - 當后面的代碼完成后,它會恢復到其原始設定,并且整個 FRESH 頁面現在被發送回客戶端。

所以彈出你的 gif,或 toast 訊息,甚至是帶有“請稍候”的 jQuery 對話框。當服務器端代碼完成時,這一切都會被吹走,新的網頁又回到客戶端。

編輯:好的,假設您掌握了頁面生命周期?

因此,您可以在頁面加載中運行您想要的所有代碼 - 直到馬回家,但代碼和頁面仍然在服務器上。所以你必須讓頁面向下移動到客戶端。這意味著您的代碼必須完成修改和更改網頁。

然后只有然后頁面才會向下移動到客戶端并顯示。因此,您可以在任何情況下更改頁面上的內容,但只有在頁面下到客戶端之后,最終用戶才會看到更改后的代碼結果。

那么,這在簡單的解釋中意味著什么?

您必須讓頁面向下傳輸到客戶端。然后單擊一個按鈕以顯示您的訊息/gif,然后運行您的服務器端代碼。

所以,你可以這樣做:

首先吹出并轉儲您的更新面板-您不需要它們。

因此,您可以像這樣放入您的 div,以及一個隱藏欄位,以及一個單擊按鈕,然后單擊該按鈕將運行您的代碼(但是,代替用戶單擊按鈕,我們將獲取客戶端代碼以單擊那個按鈕給我們!!!)。

所以,你有這個:

        <div id="theprogress" runat="server">
            <h1 style="text-align: center;">MCS File Downloader</h1>
            <asp:Image ID="imgWaitIcon" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/MyPictures/colorchangearrowdown.gif" />
            <h3 runat="server" id="h3Text" style="text-align: center">Processing File...</h3>
        </div>

        <asp:Button ID="cmdLoad" runat="server" Text="Button" ClientIDMode="Static" />

請注意上面的按鈕,因此,將您的代碼放在該按鈕中:例如:

 Protected Sub cmdLoad_Click(sender As Object, e As EventArgs) Handles cmdLoad.Click


    Dim Type As String = Request.QueryString("Type")
    If Type = "File" Then
        'TODO
    ElseIf Type = "DB" Then
        OpenDBFile()
    ElseIf Type = "QCBDBYMCSID" Then
        OpenQCBD("BYMCSID")
    ElseIf Type = "QCBDBYNAME" Then
        OpenQCBD("BYNAME")
    Else
        'TODO
    End If

    theprogress.Style.Add("Display", "none") ' hide progress when we are done


End Sub

那么,現在會發生什么?

頁面加載將注入一個按鈕點擊。代碼已完成,現在頁面將向下傳遞到客戶端 - 將顯示帶有您的進度 “影片”的 div。您在頁面加載中注入的 JavaScript 代碼現在將單擊該按鈕,并且會發生回發 - 但頁面會顯示,并將一直顯示,直到您的代碼完成,然后您的代碼隱藏影片。由于這暗示了某種可能的檔案下載,因此將隱藏進度 div 移動到按鈕單擊的第一行。

最后一個任務:一旦一切正常,然后隱藏頁面上的按鈕:

<asp:Button ID="cmdLoad" runat="server" Text="Button"
    ClientIDMode="Static" style="display:none" />

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/430454.html

標籤: 阿贾克斯 VB.net 多线程

上一篇:VSCode自動保存afterDelayw/Prettier不作業

下一篇:在C中將16位無符號整數型別轉換為8位無符號整數指標

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more