电脑技术学习

ASP.NET2.0中控件的简单异步回调

admin
;;虽然已经有了ASP.NET;AJAX了,最近学习ASP.NET控件的时候,逐步理解了原始的控件异步回调(代码取自《ASP.NET;2.0;高级编程》):;
首先,在Render事件中添加好一个事件;
protected;override;void;RenderContents(HtmlTextWriter;output);
{;
output.RenderBeginTag(HtmlTextWriterTag.Div);;

output.AddAttribute(HtmlTextWriterAttribute.Type,;"text");;
output.AddAttribute(HtmlTextWriterAttribute.Id,;this.ClientID);;
output.AddAttribute(HtmlTextWriterAttribute.Name,;this.ClientID);;
output.AddAttribute(HtmlTextWriterAttribute.Value,;this.Text);;

output.AddAttribute("OnBlur",;"ClientCallback();");;
this.AddAttributesToRender(output);;
output.RenderBeginTag(HtmlTextWriterTag.Input);;
output.RenderEndTag();;
output.RenderEndTag();;
};
这里最重要的就是output.AddAttribute("OnBlur","ClientCallback();");;

然后在OnPreRender事件中,添加如下代码:;protected;override;void;OnPreRe;
nder(EventArgs;e);
{;
//Page.ClientScript.RegisterClientScriptInclude("UtilityFunctions",;"JScript.js");;
Page.ClientScript.RegisterStartupScript(typeof(Page),;"ControlFocus",;"document.getElementById('";+;this.ClientID;+;"').focus();",;true);;
Page.ClientScript.RegisterStartupScript(typeof(Page),"ClientCallback","function;ClientCallback();{"+"args=document.getElementById('"+this.ClientID+"').value;"+Page.ClientScript.GetCallbackEventReference(this,"args","CallbackHandler",null,"ErrorHandler",true)+"}");;
//向服务器发送请求,由服务器端生成回调的客户端脚本。;
};
也就是在服务器端生成客户端代码,注意最后一个方法GetCallbackEventReference,我理解的是在服务器端捕捉了客户端的请求之后,生成相应的客户端脚本,在服务器端回调的时候,客户端决定用什么函数处理回调和错误。;

服务器端实现接口的一个方法,也就是接收到客户端的请求之后,由服务器端先处理,然后再把结果和相应代码发回客户端。;
#region;ICallbackEventHandler;Members;
public;string;RaiseCallbackEvent(string;eventArgument);
{;
int;result;;
if;(!Int32.TryParse(eventArgument,;out;result));
throw;new;Exception("The;method;is;not;implemented.");;
return;"Valid;Data";;
};
#endregion;最后,在jscript.js文件中写好相应的回调处理函数即可:;
var;args;;
var;ctx;;


function;ValidateText(ctl);
{;
if(ctl.value=='');
{;
alert("Please;enter;a;value");;
ctl.focus();;
};
};

function;CallbackHandler(args,ctx);
{;
alert("The;data;is;valid");;
};

function;ErrorHandler(args,ctx);
{;
alert("The;data;is;not;a;number");;
}

标签: 控件