二、开发复合控件
控件要检查用户提交的内容是否包含“攻击性”词语,攻击性词语由一个xml文件定义,xml文件的结构如下:
<?xml version="1.0"? encoding="gb2312">
<words>
<word>词语一</word>
<word>词语二</word>
</words>
本文的复合控件(composite)包含三个asp.net服务器控件:一个textbox控件,一个label控件,还有一个button控件。当用户点击button控件,composite检查用户提交的文本是否包含了xml文件中指定的词语(xml文件的默认名字是bad_words.xml,通过一个自定义属性定义),并抛出一个自定义事件。另外,composite控件还将它的label子控件的一个text属性显露成顶级属性。
复合控件可以有选择地将子控件显露成属性,或者有选择地将子控件的属性和事件作为顶级属性和事件显露出来。当复合控件整合来自子控件的属性时,它通常只是简单地委托子控件执行操作,如下面的例子所示:
// 将操作委托给标签对象,标签对象是一个
// system.web.ui.webcontrols.label的实例
public property text() as string
get
ensurechildcontrols()
return label.text
end get
set
ensurechildcontrols()
label.text = value
end set
end property
我们需要一个文本输入框让用户输入内容,一个按钮来提交表单,还要一个向用户反馈信息的文本标签。下面我们来看看web表单的代码,复合控件就是在这里实例化的:
【composite.aspx】
<%@ page language="vb" debug="false" trace="false" %>
<%@ register tagprefix="custom" namespace="customcontrols" assembly = "customcontrols" %>
<html>
<script language="vb" runat=server>
private sub checktext(sender as object, e as checkeventargs)
if e.match = false then
composite.text = "<h2>发布内容请遵守本站规则!不得发布攻击性言辞!</h2>"
else
composite.text = "你提交的内容已通过检查!"
end if
end sub
</script>
<body>
<h1>语言净化控件实例</h1><br>
<form runat=server>
<custom:composite id = "composite" oncheck = "checktext"
filename = "bad_words.xml" runat = server/></form></body>
</html>
上面的代码首先注册指定的复合控件。我们将把控件的代码编译成一个.dll文件,放入应用的bin目录,这是asp.net首先搜索的位置。在web表单构成的用户界面中,我们实例化了自定义控件,同时指定了:
⑴ 当控件抛出oncheck事件,执行一个本地的子过程checktext。我们把复合控件的标签的文本通过一个公用属性显露出来,标签的内容由oncheck事件句柄设置的另一个公用属性决定。
⑵ 定义攻击性词语的xml文件的名字。
⑶ 另外,我们还定义了一个由复合控件调用的checktext子过程。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器