为什么会有page.isclientscriptblockregistered(scp_number_only_script_id)呢?我们想象一下,如果在web页中有十个该控件,那是不是就要输出十个这样的脚本?显然,这是画蛇添足了,所以,我们要用isclientscriptblockregistered()判断该脚本是否在客户端输出,如果脚本在客户端已注册,则不再输出了。
接下来就是重写onprerender()方法了,该方法负责向客户端绘制脚本。
protected override void onprerender(eventargs e)
{
base.onprerender (e);
renderjavascript();
}
大家应该注意到,该脚本需要事件触发才会执行,当用户从浏览器输入数据时,如果是非数字,则忽略该动作,否则才接受输入。这就需要onkeypress="javascript:return virty(this);"这段代码了。那么,这段代码怎么向客户端输出呢?重写addattributestorender()方法吧,该方法负责绘制组件的属性。于是,我们写了下面一段代码:
protected override void addattributestorender(htmltextwriter writer)
{
base.addattributestorender(writer);
writer.addattribute("onkeypress",scp_number_only_hook);
}
最后的源码如下:
/////////////////////////////////////////////////////////////////////////////