![](/img/trans.png)
[英]ASP.NET - How do I register multiple JavaScript calls to run on PostBack?
[英]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.