0

在我的asp.net網站,我經常使用下面的方法之前實際添加任何腳本的定製片或註冊一個js文件只有一次:註冊ClientScriptBlock在多次回發

IsClientScriptBlockRegistered(Type, String) 

IsClientScriptIncludeRegistered(Type, String) 

當一個頁面需要一個定製片的腳本,在PageLoad期間的某處我呼叫IsClientScriptBlockRegisterd(),然後是RegisterClientScriptBlock()

if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(Page), "myKey")) 
{ 
    // Start creating ScriptBlock // 
    // .. // 

    // Actually Register the script // 
    ToolkitScriptManager.RegisterClientScriptBlock(this, typeof(Page), "myKey", 
    sbScript.ToString(), false); 
} 

上述代碼在回發期間總是被調用一次。

當用戶在相關頁面上,同時停留在該頁面上時,他可以導致多次回發(實際回發,而不是回調)。 在回發期間,GetRegisteredClientScriptBlocks方法始終返回一個空集合。所以IsClientScriptBlockRegistered總是返回false。因此,對於每次回發,我必須重新創建自定義腳本塊並將其重新註冊到頁面,然後重新發送給客戶端。

只要用戶停留在相關頁面上,或只要用戶會話處於活動狀態,是否有註冊自定義腳本塊的方法,並讓它存在於客戶端?

在此先感謝。

回答

0

假設你正在使用ASP.Net Web窗體,你可以使用下面的屬性,以確保無論是回發與否:

Page.IsPostback()

或者,您可以通過某種標誌/餅乾/隱藏變量表示這個特定頁面不需要任何客戶端腳本進行註冊。

+0

感謝您的回答。我認爲你不瞭解這個問題。該頁面確實需要註冊客戶端腳本。我只是不想一遍又一遍地做。添加IsPostback檢查將導致根本沒有客戶端腳本。 – Brabbeldas