客户端脚本并获得回调事件参考。

时间:2009-11-06 18:56:56

标签: asp.net ajax

任何人都可以帮我描述一下我的代码。

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

1 个答案:

答案 0 :(得分:2)

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

GetCallbackEventReference方法返回一个带有JavaScript WebForm_DoCallback函数的字符串,该函数执行到服务器的带外回调。它还向客户端呈现脚本标记,其源属性设置为WebResource.axd。 WebResource.axd是一个HTTP处理程序,可以下载嵌入在程序集中的资源。该资源包含WebForm_DoCallback函数。带有WebForm_DoCallback函数的eventRef字符串永远不会注入客户端,并且参数都是空的,所以我假设这行只用于将WebResource.axd输出到页面。

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

第一行获取外部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类的自定义验证器控件的一部分。