簡體   English   中英

使用 vb.net 中的代碼從 JavaScript confim 顯示和獲取值

[英]Display and get value from JavaScript confim using code behind in vb.net

我需要在插入之前檢查數據庫中的重復數據,如果檢測到重復數據,請讓用戶選擇繼續保存操作或更改正在保存的內容並重試。 我試過使用Windows.Forms.MessageBox.Show但我發現這不適用於我想做的事情。 過了一會兒,我找到了這段代碼

If Not Page.ClientScript.IsStartupScriptRegistered(Me.GetType(), "confirm") Then Page.ClientScript.RegisterStartupScript(Me.GetType, "confirm", "confirm('" & Message & "');", True) End If

從這篇文章Call javascript from vb.net 代碼后面並試一試。 但我永遠無法進入要顯示的確認對話框。 我試圖使用String.Concat()構建消息字符串並將其與調用一起傳遞,但它仍然無法正常工作,因此我最終將構建的字符串取出並用硬編碼的字符串替換它。 在那之后,我能夠得到要顯示的消息。 但是發生的情況是,在方法中的所有行都已執行后顯示對話框。 我需要能夠在代碼執行期間顯示此消息,並且我需要能夠使用從它返回的值進行進一步處理。 誰能幫我解決以下問題:為什么只有在執行代碼后才會顯示對話框? 如何構建和顯示確認對話框中顯示的字符串?

為什么只有在代碼執行后才顯示對話框?

因為您不了解 web 和 asp.net 的工作原理。

您背后的代碼不能,也不能,也永遠不會直接與用戶交互。

您在 web 站點中的代碼僅在用戶執行操作后運行,並且 web 頁面到達服務器。 后面的代碼只能修改 web 頁面 - 不能與用戶交互。 當您的所有代碼都完成后,整個 web 頁面現在被發送回最終用戶。 因此,如果您的代碼后面停止、等待或停止,則 web 頁面仍然卡在服務器上。

只有在您的代碼運行並且整個頁面被發送回客戶端之后,瀏覽器才會重新加載重新繪制,現在 web 頁面又回到了客戶的台式計算機上。 web 服務器?

它炸毀,炸毀和破壞表單變量,破壞 web 頁面,現在 web 服務器正在等待說 20 個用戶中的任何一個,這些用戶在他們的桌面上有一些 Z2567A5EC9705EB7AC2C984033E 頁面。 web 服務器沒有加載 20 個不同的頁面。

web 服務器沒有 20 組變量。 NOTHING 存在服務器端。

現在,當 20 個用戶中的一個單擊其 web 頁面上的按鈕時?

它被張貼或傳送到 web 服務器。 web 服務器處理傳入的 web 頁面,加載正確的 web 頁面。 重新創建 web 頁面中的值和更重要的所有代碼和變量。 他們每次都開始。 (否則一台 web 服務器將如何處理許多用戶?)。 我的意思是,你可以在顯示器上打字——但你不能讓 20 個人來做,對嗎? 因此,每個請求都是該 web 頁面的新進程。

現在,您的代碼運行(用戶使用 web 瀏覽器在另一端等待)。 當你編碼完成,甚至修改一個簡單的文本框? 最終用戶 SITLL 看不到這些更改。 當(並且僅當后面的代碼完成時),web 頁面完成渲染。 然后整個 web 頁面現在被發送回客戶端(它會覆蓋他們正在查看的內容。!!)。

所以,這個所謂的往返看起來像這樣:

web 頁面位於他們的用戶桌面上。 所以你有這個:

在此處輸入圖像描述

注意非常小心 - 在服務器端沒有加載 web 頁面。 您的文本框和后面的 C#/vb.net 代碼甚至都沒有加載!!! - 不存在值或變量!!!

所以用戶說點擊一個按鈕。

所以會發生這種情況:

在此處輸入圖像描述

因此該頁面已發布 - 沿 web 服務器上行。

所以現在我們有了這個:

在此處輸入圖像描述

所以 web 服務器現在可以獲取正確的 web 頁面。 它加載,該頁面中的所有代碼和變量都是從頭開始重新創建的!!!

然后,只有這樣,后面的代碼才開始運行。 該代碼可以修改文本框,做任何事情。 但是,這里可能會發生與用戶的零交互。

現在,后面的代碼沒有辦法停止或等待用戶輸入。 該代碼只能運行,並且只能修改頁面 - (用戶 web 頁面沒有變化,他們看不到任何代碼運行,即使您修改文本框等,用戶也看不到這些更改)。

現在,當您的所有代碼完成更改 web 頁面時?

然后 web 頁面現在發送回給用戶。

在此處輸入圖像描述

瀏覽器現在重新加載整個頁面,.! (它通常看起來不像,但現在重新創建了整個頁面)。

在服務器端? web 頁面現在被丟棄,從 memory 中刪除,並且您在代碼中擁有的所有變量都被銷毀並從 memory 中刪除。 web 服務器現在已准備好處理從您的眾多用戶中的任何一個發布的任何新 web 頁面。

所以,你不能停止代碼並等待輸入,對嗎?

我的意思是,比如說在桌面上,我們有一個按鈕和兩個文本框。 當我們單擊按鈕時,我會詢問您 TextBox1 的值,然后是 TextBox2 的值。

我們有這個:

在此處輸入圖像描述

我們可以用這個提示(並有代碼 HALT/WAIT):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' ask for Text Box 1 value

    TextBox1.Text = InputBox("Enter Value for Text box 1")

    TextBox2.Text = InputBox("Enter value for Text box 2")

End Sub

所以,當我們運行時,我們會得到:

在此處輸入圖像描述

因此,代碼暫停,等待輸入,然后被推入文本框。

但是,現在,讓我們用 web 試試這個。

按鈕,兩個文本框是這樣的:

在此處輸入圖像描述

所以,我現在可以雙擊按鈕並編寫以下代碼:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    TextBox1.Text = "hello"

End Sub

現在,上述工作,因為整個頁面已發布。

現在讓我們說我想“確認”上面的按鈕。 在我將文本設置為 hello 之前詢問用戶?

好吧,我不能用后面的代碼來做到這一點。 並重新查看上面的圖形圖像。 然后復習 100 次,直到你掌握了這一點。 你必須掌握回傳或所謂的往返概念。

那么,我們該如何提示呢? 好吧,讓我們做一個簡單的想法。

提示用戶交互? 我們不能在后面使用代碼!!!

所以,我能為按鈕做的是:

我們必須引入客戶端代碼——我們必須從客戶端獲取用戶輸入——我們不能使用后面的代碼!!!

所以,我可以這樣做:

        <asp:Button ID="Button1" runat="server" Text="Button" Width="85px"
            OnClientClick="return myask();"  />

        <script>
            function myask()
            {
                return confirm("Do you want hello in the text box?")
            }
        </script>

所以按鈕和以前一樣,但我們現在提示。 當我們在 web 頁面上運行時,我們得到以下信息:

在此處輸入圖像描述

所以我們在客戶端運行代碼——此時服務器甚至可以被拔掉。 我們沒有發回按鈕點擊。

現在事實證明,如果您將一個按鈕放入 web 頁面,然后連接一個客戶端事件,您可以將 OnClientClick 添加到上面,,.! 如果您返回 true,則按鈕單擊會觸發,如果您返回 false,則按鈕單擊不會觸發。

所以再次注意,我們不能編寫或創建服務器端循環來一遍又一遍地提示。 但是,我們可以創建一個客戶端!!!!

但是,既然我們無論如何都必須顯示該信息? 然后在網格中顯示信息,每行都有一些復選框,用戶點擊每個復選框,然后有一個提交,你接受或拒絕一個鏡頭中的所有選擇。

如果您不執行上述操作(這對您的用戶來說痛苦和痛苦要少得多),那么您真的需要為每個選擇提供提示/是/否嗎? 你仍然必須 package 向上代碼, package 向上標記, package 向上信息並仍然發送給客戶端。 如前所述,這是由於 NEVER 背后的代碼與用戶交互 - 但只能對 web 頁面進行更改。 並且僅在 web 頁面在服務器上由后面的代碼處理時進行更改。

因此,代替一系列是/否提示(這將折磨您的用戶至死),您需要獲取該數據或任何有問題的數據。 在某個網格中渲染它,然后將整個東西發送到客戶端。 那時,他們可以使用 UI 來做出選擇,然后並且只有這樣,您現在將這些許多選擇傳回服務器。

暫無
暫無

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

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