2009-11-06 2 views
1

Quelqu'un peut-il m'aider à me décrire le code suivant ligne par ligne.Script client et obtenir la référence d'événement de rappel.

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); 
     } 

Répondre

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

La méthode GetCallbackEventReference retourne une chaîne contenant la fonction JavaScript WebForm_DoCallback, cette fonction effectue callbacks out-of-band au serveur. Il restitue également une balise de script au client avec son attribut source défini sur WebResource.axd. WebResource.axd est un gestionnaire HTTP qui permet le téléchargement des ressources incorporées dans un assembly. La ressource contient la fonction WebForm_DoCallback. La chaîne eventRef avec la fonction WebForm_DoCallback n'est jamais injectée dans le client et les paramètres sont tous vides, donc je suppose que cette ligne est utilisée juste pour afficher WebResource.axd sur la page.

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

La première ligne obtient un chemin relatif au fichier JavaScript externe 'AjaxValidator.js'. La deuxième ligne injecte une balise de script client avec l'ensemble source sur le chemin du fichier JavaScript externe renvoyé par ResolveClientUrl.

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

La première des deux dernières lignes crée le code JavaScript à rendre au client. Le bloc de script ajouté par la méthode RegisterStartupScript s'exécute lorsque la page termine le chargement mais avant que l'événement OnLoad de la page ne soit déclenché. La fonction 'evaluationfunction' est définie sur la méthode à appeler lorsque la page valide sur le client, elle est appelée par la méthode ValidatorValidate située dans le script WebUIValidation.js (WebResource.axd est également utilisé pour récupérer ce fichier). Cette ligne n'a pas beaucoup de sens hors contexte. Je suppose que l'événement PreRender fait partie d'un contrôle de validateur personnalisé qui hérite de la classe BaseValidator.

Questions connexes