簡體   English   中英

RegisterStartupScript的含義:會多久調用一次JavaScript代碼?

[英]Making sense of RegisterStartupScript: How often will the JavaScript code be called?

ScriptManager.RegisterStartupScript文檔說(重點是我):

使用ScriptManager控件為每個異步回發注冊一個啟動腳本塊,並將該腳本塊添加到頁面。

[...]

備注

您可以使用此方法注冊每次發生異步回發時都包含的啟動腳本塊 [...]

因此,我期望一旦在RegisterStartupScript中注冊了腳本塊,便會在隨后的每個異步回發中執行該腳本塊。 但是,這不會發生。 這是一個MCVE:

<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
    protected void btnRegisterScript_Click(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "Test script",
            "window.alert('Script triggered!');", true);
    }

    protected void btnRegularPostback_Click(object sender, EventArgs e)
    {
        // Do nothing
    }
</script>
<html>
<head>
    <title></title>
</head>
<body>
    <form runat="server">
        <asp:ScriptManager runat="server" />
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                <asp:Button ID="btnRegisterScript" Text="Register Script" runat="server" OnClick="btnRegisterScript_Click" />
                <asp:Button ID="btnRegularPostback" Text="Regular Postback" runat="server" OnClick="btnRegularPostback_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>

復制:

  1. 點擊“注冊腳本”。
  2. 點擊“常規回發”。

預期結果:

步驟1和步驟2均會引發JavaScript警報(因為步驟1已注冊腳本,而步驟2是異步回發)。

實際結果:

只有步驟1會導致JavaScript警報。

這對我很好。 希望僅在步驟1(而不是步驟2)期間發生警報。 但是,該行為與文檔不匹配,因此,我想知道造成誤解的原因。

我剛剛嘗試了您描述的情況,這就是我觀察到的情況:每次單擊“注冊腳本”按鈕時,都會出現一個<script type="text/javascript">window.alert('Script triggered!');</script>標簽被添加為“ head”標簽的子級。 因此,如果您單擊3次,將在head標簽下獲得3個script標簽。 我相信這就是文檔中關於每個異步回發的內容。

單擊“常規回發”按鈕后,無法執行“ head”標記中已注冊的腳本(通過“注冊腳本”注冊)。 並且此按鈕的事件處理程序中沒有注冊腳本。 因此,我不希望腳本在“常規回發”按鈕單擊后執行。

暫無
暫無

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

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