2009-11-06 62 views
1

任何人都可以幫助我逐行描述下面的代碼。客戶端腳本並獲取回調事件引用。

protected override void OnPreRender(EventArgs e) 
     { 
      String eventRef = Page.ClientScript.GetCallbackEventReference(this, "", "", ""); 

      // Register include file 
      String includeScript = Page.ResolveClientUrl("~/ClientScripts/AjaxValidator.js"); 
      Page.ClientScript.RegisterClientScriptInclude("AjaxValidator", includeScript); 

      // Register startup script 
      String startupScript = String.Format("document.getElementById('{0}').evaluationfunction = 'AjaxValidatorEvaluateIsValid';", this.ClientID); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "AjaxValidator", startupScript, true); 

      base.OnPreRender(e); 
     } 

回答

2
String eventRef = Page.ClientScript.GetCallbackEventReference(this, "", "", ""); 

GetCallbackEventReference方法返回使用JavaScript WebForm_DoCallback功能的字符串,這種功能執行了帶外回調到服務器。它還向客戶端呈現腳本標記,並將其源屬性設置爲WebResource.axd。 WebResource.axd是一個HTTP處理程序,可以下載嵌入程序集中的資源。該資源包含WebForm_DoCallback函數。具有WebForm_DoCallback函數的eventRef字符串永遠不會被注入到客戶端,並且參數都是空的,所以我假設這條線只用於輸出WebResource.axd到頁面。

Page.ClientScript.RegisterClientScriptInclude("AjaxValidator", includeScript);String includeScript = Page.ResolveClientUrl("~/ClientScripts/AjaxValidator.js");

第一行得到的相對路徑到外部JavaScript文件 'AjaxValidator.js'。第二行注入一個客戶端腳本標記,其源設置爲由ResolveClientUrl返回的外部JavaScript文件的路徑。

String startupScript = String.Format("document.getElementById('{0}').evaluationfunction= 'AjaxValidatorEvaluateIsValid';", this.ClientID);Page.ClientScript.RegisterStartupScript(this.GetType(), "AjaxValidator", startupScript);

前的最後兩行的創建JavaScript代碼將被呈現給客戶。 RegisterStartupScript方法添加的腳本塊在頁面完成加載之後但在頁面的OnLoad事件引發之前執行。 'evaluationfunction'被設置爲在頁面在客戶端驗證時被調用的方法,它由位於WebUIValidation.js腳本中的ValidatorValidate方法調用(WebResource.axd也用於檢索此文件)。從上下文來看,這條線沒什麼意義。我假設PreRender事件是從BaseValidator類繼承的自定義驗證器控件的一部分。

相關問題