簡體   English   中英

如何注冊一個Javascript函數以與每個回發一起運行?

[英]How do I register a Javascript function to run with every postback?

我在用戶控件中有一個樹視圖。 我需要在每個異步回發中運行javascript函數,以將其所在的div滾動到正確的位置。 我已經開始工作了,但是我認為必須有一種“更清潔”的方法。 在控件的Page_Load函數中,我有以下代碼。 有更好的方法嗎?

ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "key" + DateTime.Now.Ticks, "RestorePosition();", true);

為了任何人尋找這個答案的利益,這是我最終所做的工作。 在ascx頁面的頂部,我有以下代碼:


<script type="text/javascript">
    function pageLoad(sender, args) {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SavePosition);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestorePosition);
    }

    function SavePosition(sender, args) {
        document.getElementById('hdnScrollSaver').value = document.getElementById('reportTreeViewdiv').scrollTop;
    } 
    function RestorePosition(sender, args) {
        document.getElementById('reportTreeViewdiv').scrollTop = document.getElementById('hdnScrollSaver').value;
    } 

</script>

然后,將樹視圖包裝在div標簽中,如下所示:


<div class="reportTreeView" id="reportTreeViewdiv">
                    <asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate" 
                        OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" PathSeparator="|" SkinID="ReportTreeView" />
                </div>

希望這對某人有幫助。

Ajax為您提供類似於ASP.Net頁面的頁面生命周期,但是在客戶端。 因此,在pageLoad事件中,我們可以連接要在每個begin請求和end請求上調用的函數。

function pageLoad(sender, args) {
  Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
}

function beginRequest(sender, args) {
        // begin request code - i.e. make a "processing" div visible
}

function endRequest(sender, args) {
        // we are back
        RestorePosition(); 
}

我認為這是一種“干凈”的方法。 您正在以應有的方式使用ScriptManager。

如果您不喜歡該行代碼的外觀,則始終可以將其重構為“ Script Utility”類或類似內容。 我不會,但是那只是我。

我認為您做得正確。 我會擺脫唯一的鑰匙。

根據MSDN

通過使用密鑰標識腳本,多個服務器控制實例可以請求腳本塊,而無需兩次將其發射到輸出流。

具有相同關鍵參數值的任何腳本塊均被視為重復。

該密鑰用於防止您多次創建腳本,因此您不需要唯一的腳本。

暫無
暫無

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

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