当然有,你可以自定义一个控件来实现。你可以创建一个包含相关的这些基本控件的自定义控件。然后通过设定该控件的属性值,可用来得到相关的邮政编码及其它信息。
这次要在这个asp.net页面注册一个简单的用户自定义控件,然后以代码的方式和在asp.net页面表单内定义的方式定义一个这样的控件。在这个asp.net页面的顶端,你需要注册这个控件:
<%
@register
tagprefix="My"
tagname="my_controls"
src="../mycontrols.ascx"
%>
其中tagprefix可以设置为任何你想要有代码中定义你的控件所用的名字,在定义控件时,这个属性和tagname属性一起使用,从而指出你正在创建一个这样的控件类型。src属性用来设定自定义控件的文件所在的位置。
进行这样的定义之后,你就可以在代码中定义自己的控件了。如:
<my:my_controls
id="My_controls_1"
runat="server"
/>
其中,My:my_controls标记名称就是在注册(register)标记中设定的tagprefix和tagname属性的组合。之后,你可以为这个自定义控件提供一个名字,并指出该控件应该在服务器上执行。如果这个控件具有一些可写的属性的话,你可以在控件的定义中设置这些属性。如果控件有一个numlines属性的话,就可以这样来设置它:
<my:my_controls
id="My_controls_1"
numlines = 5
runat="server"
/>
或者也可以像下面这样在代码中进行设置:
my_controls_1.numlines=5
在代码中自动将一个自定义控件实例化并添加到页面中,与标准控件的实例化过程没有太大的区别。具体如下:
dim mycontrol as usercontrol = loadcontrol("../mycontrols.ascx")
myform.controls.add(mycotrol)
你将其中的变量标为一个usercontrol(自定义控件)数据类型。同时,在同一代码行上使用了loadcontrol方法,并将你的控件定义文件的路径传给这个方法。之后,你就具有一个自定义控件的实例化变量。然后,就可以像添加任何其他的控件那样将其添加到页面中。
///////////////////////////////////////////////////////////////////////////////////////////////
自定义控件最基本的应用之一就是创建一个控件,在其中只简单地显示一组位于其它页面上的其它控件。例如,可能在一系列asp.net页面中,你总是用相同的页脚,就像蓝色理想下方的导航。或者,也可能你在整个站点中使用一个相同的导航条。你可以在每个这样的页面上都编写同样的代码,但是你也可以用这样的方法来代替:你可以将这个页脚或导航条封装到一个用户自定义控件中。然后,在每一个需要这一项的页面上,只需定义一个你自己的这个自定义控件即可。当然,你也可以使用#include file包含它,但是.net的自定义控件却提供了更强大的功能。
下面的这个实例将显示一个登录窗口,它可以调用在任意你想显示的页面中:
<table style=”font:10pt verdana;border-width:1;border-style:solid;border-color:black;” cellspacing=”15”>
<tr>
<td>
<asp:label
id=”lbl1”
runat=”server”
font-bold=”true”
text=”username”
/>
</td>
<td>
<asp:textbox
id=”txtusername”
runat=”server”
/>
</td>
</tr>
<tr>
<td>
<asp:label
id=”lbl2”
runat=”server”
font-bold=”true”
text=”password:”
/>
</td>
</tr>
<tr>
<td>
<asp:textbox
id=”txtpassword”
runat=”server”
textmode=”password”
/>
</td>
</tr>
</table>
这些控件并不是定义在一个asp.net页面的表单上的。这是因为保存为一个用户自定义控件的这个文件将会把它自身的内容放在其他asp.net页面的表单中。换句话说,当你在asp.net页面中定义一个这样的控件时,就像是你将上面的代码插入到这个asp.net页面上表单内的相应点。
在定义这个控件之后,就可以在asp.net页面上注册这个控件了:
<%@register
tagprefix=”my”
tagname=”logincontrol”
src=”usercontrols.ascx”
%>
然后就开始定义了:
<my:logincontrol
id=”msc1”
runat=”server”
/>//////////////////////////////////////////////////////////////////////////////////////////////
当你创建一个用户自定义控件时,可能要在其中加入一些属性。这使得使用你的控件的人可以对该控件进行自定义,或者从该控件中取得一些值。只读属性是你可以创建的属性的一种。这种类型的属性只能允许使用该控件的人员从该控件中获取属性值,而不能对这种类型的属性进行设置。通过一个属性返回当前系统日期是只读属性的一种典型应用。或者如果在你的自定义控件中有一个返回当前版本的属性的话,最好将其作为只读属性。
下面的实例中所提供的用户自定义控件,当在一个asp.net页面上定义的时候,将显示一些控件,访问者可以使用这些控件来输入其姓名和密码。本控件提供了三个只读属性,分别返回在textbox中输入的数据和本控件的版本信息。
在这个用户自定义控件文件中,定义了二个textbox控件。第一个textbox控件用来输入访问者的姓名:
<asp:textbox
id=”txtusername”
runat=”server’
/>
第二个textbox控件允许访问者在其中输入密码:
<asp:textbox
id=”txtpassword”
runat=”server”
textmode=”password”
/>
下面是一段代码,当页面首次载入时会自动运行:
sub page_load(s as object, e as eventargs)
if not ispostback then
txtusername = “Your name Here”
end if
end sub
这段代码只是实现了将默认文本放在第一个textbox控件中的功能。要注意的是这段代码只能从这个用户自定义控件运行。这是因为,定义用户自定义控件的这个页面并产不能直接对这个控件中的底层进行访问,而是通过你自己的那些属性来对底层的控件进行访问。
本控件提供了三个属性,所有的这三个属性都是只读的。第一个属性称作username(用户名),并返回一个字符串:
public readonly property username() as string
get
username = txtusername.text
end get
end property
这个属性返回在第一个textbox中输入的文本。
第二个属性将返回textpassword中的那个textbox控件中输入的密码:
public readonly property password() as string
get
password = txtpassword.text
end get
end property
第三个属性为version,返回这个自定义控件的版本号:
public readonly property version() as string
get
version = “1.0”
end get
end property
在保存了这个控件的定义文件后,就可以在一个asp.net页面中定义一个这样的用户自定义控件了:
<my:logincontrol
id=”msc1”
runat=”server”
/>
<asp:button
id=”button”
text=”OK!”
onclick=”button_click”
runat=”server”
/>
<asp:label
id=”lblmessage”
runat=”server”
/>
当按下button控件时,会触发以下代码:
sub button_click(s as object, e as eventargs)
lblmessage.text=”you entered:” & msc1.username &”---” & msc1.password & “<br>” &”this control version:” & msc1.version
end sub
如果你把这句代码加在button_click子过程中,将会返回一个错误:
msc1.username=”Lemongtree”
这是因为这个属性是只读的。
/////////////////////////////////////////////////////////////////////////////////////////////
当你创建自定义控件时,可以在其中放置一些以只写的方式使用的属性。这意味着使用你的控件的人员可以为该属性设定一个值,但不能从该属性中获得其属性值。
<asp:textbox
id=”txtusername”
runat=”server”
/>
<asp:textbox
id=”txtpassword”
textmode=”password”
runat=”server”
/>
<asp:label
id=”lbl1”
runat=”server”
font-bold=”true”
text=”user name:”
/>
<asp:label
id=”lbl2”
runat=”server”
font-bold=”true”
text=”password:”
/>
这个用户自定义控件开放了二个只写属性。第一个称做fontname
public writeonly property fontname() as string
set
lbl1.font.name = value
lbl2.font.name = value
end set
end property
这个属性接受传递过来的值,并将其分配给这个用户自定义控件中两个label控件的font.name属性。注意这个属性中定义了writeonly,另一个属性为fontbold:
public writeonly property fontbold() as Boolean
set
lbl1.font.bold= value
lbl2.font.bold = value
end set
end property
这个属性用来指定上述label控件中的文本是否以bold进行显示,传递给这个属性的值要通过value关键字进行传递。
在保存这个控件后,就可以在一个.net页面上将其实例化了:
<my:logincontrol
id=”msc1”
runat=”server”
fontbold=”false”
/>
asp.net中自定义控件的功能还需要我们在学习的过程中细细体味,这里只起一个抛砖引玉的作用。