簡體   English   中英

在按鈕上同時使用 JavaScript 和 C# 方法的情況下,如何防止回發頁面?

[英]How can prevent postback page in the case of using both a JavaScript and a C# method on a button?

這是一個 ASP.NET C# 的問題。

    <script>
        function buttonfunc() {
            document.getElementById("demo").innerHTML = "js work";
        }
    </script>

    <form id="form1" runat="server">
        <div>
            <p id="demo"></p>
            <asp:Button ID="UpdateButton" runat="server" Text="Update"
             OnClick="UpdateButton_Click" OnClientClick="buttonfunc()"; return false;/>
        </div>
    </form>

        protected void UpdateButton_Click(object sender, EventArgs e)
        {
            Response.Write("cs work");
        }

在按鈕上同時使用 JavaScript 和 C# 方法的情況下,我們如何停止回發頁面並同時顯示兩行文本(如果可能,不使用 AJAX)?

這種工作方式相當方便。

雖然該按鈕可以同時具有客戶端事件和服務器端事件?

如果客戶端js代碼/事件返回false,則服務器端事件不會觸發。 這非常適合提示用戶刪除記錄或執行某些您需要“確認”的操作。

所以,按下這個按鈕:

        <asp:Button ID="cmdDel" runat="server" Text="Delete record"
            CssClass="btn"
            OnClick="cmdDel_Click"
            OnClientClick="return DelConfirm()" />

    <script>

        function DelConfirm() {

            return confirm("Really delete this reocrd?")

        }

    </script>

因此,如果 js 代碼(客戶端)返回 true,則服務器按鈕點擊運行。 如果客戶端 js 代碼返回 false,則服務器端按鈕不會運行。

你會看到上面運行的:

在此處輸入圖像描述

並同時顯示兩行文字

嗯,不清楚你在這里的目標是什么。 您要在此處顯示哪兩行?

我的意思是,要么你想要/讓服務器端按鈕事件代碼運行,要么它不運行。 如前所述,如果您返回 false,那么您不應該看到回發。 使用您的示例代碼,返回 false 應該導致服務器端按鈕甚至永遠不會運行。

我的意思是,如果您不進行回發,那么您可以/將會運行服務器端按鈕代碼就沒有意義。 您需要回發才能發生這種情況。

現在,您可能可以使用更新面板,它允許您僅定義 web 頁面中將傳送到服務器並運行您的代碼的那部分。 從用戶的角度來看,該頁面似乎沒有回發(在這種情況下您實際上沒有完整的頁面回發)。 瀏覽器滾動條不會改變位置,並且您不會看到瀏覽器“微調器”顯示回發。

因此,您在腳本管理器中拖放,然后在更新面板中,您將擁有:

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>

                <asp:Button ID="cmdDel" runat="server" Text="Delete record"
                    CssClass="btn"
                    OnClick="cmdDel_Click"
                    OnClientClick="return DelConfirm()" />

                <script>

                    function DelConfirm() {

                        return confirm("Really delete this reocrd?")

                    }

                </script>


            </ContentTemplate>
        </asp:UpdatePanel>

現在,在您的代碼示例中,將所有內容都放在內容模板中,並刪除客戶端點擊的 return false。 試一試。

現在,請謹慎對待上述內容。 頁面生命周期會觸發。 因此,頁面加載事件將觸發(就像它總是那樣),然后您的代碼存根將運行。 但是對於用戶來說,您看不到完整的頁面回發。 這通常稱為“部分頁面”回發。

不用說,要構建一個有效的 web forms 頁面,99% 的時間,您的頁面加載事件會設置控件的值並僅在第一個頁面上加載?

您在頁面加載事件中有 IsPost 后存根。 所以你真正的第一次頁面加載代碼只運行一次。

例如:

if (!IsPostBack) 
{
     // first time page load
     // load up grid, some combo boxes etc.
     // this code only runs ONE time, on first page load
}

暫無
暫無

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

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