自学Web开发第九天-基于VB和ASP.NET:服务器控件 (列表控件、选择控件、图形显示控件、容器控件、其他控件)
服务器控件是ASP.NET提供的能够简单快速使用的组件,主要包括 文本控件、按钮控件、列表控件、选择控件、图形显示控件、容器控件、其他控件。上一篇是 文本控件、按钮控件,所以这一篇从 列表控件继续。
列表控件
ListBox列表框控件
ListBox控件是一个静态的列表框,可以添加一组内容列表,以供选择一项或多项。如果列表项总数超出了可以显示的项数,则ListBox控件会自动添加滚动条。另该控件支持数据绑定。
常用的属性、方法和事件有:
ListItem,该元素定义了ListBox控件中的可选项,使用方法如下。要注意的是,显示顺序标签文本>Text属性>Value属性。另Text和Value的区别在于,Text是用来显示的文本,Value是用来存储的值。例如Text显示为俊男或美女,Value可以以男女存在数据库中。
<asp:ListBox ID="ListBox1" runat="server" Rows="4" >
<asp:ListItem Selected="True" Text="Mon" Value="1" >星期一</asp:ListItem>
<asp:ListItem Text="Tue" >星期二</asp:ListItem>
<asp:ListItem Value="3">星期三</asp:ListItem>
<asp:ListItem Text="Thu" Value ="4"></asp:ListItem>
<asp:ListItem Value="5"></asp:ListItem>
</asp:ListBox>
AutoPostBack,自动回传,即发生改变时是否自动产生向服务器的回传数据,同TextBox
SelectionMode,选择模式是Single(单选)或Multiple(多选)
Rows,控件显示选择项的行数
DataSource,此属性必须由代码添加,属性窗口默认没有。作用是可以从数组或集合中获取列表项并添加到控件中,使用方法如下:
Dim arrlist As ArrayList = New ArrayList()
arrlist.Add("1111")
arrlist.Add("2222")
arrlist.Add("3333")
arrlist.Add("4444")
ListBox1.DataSource = arrlist
ListBox1.DataBind()
DataBind,当使用DataSource属性附加数据源时,使用此方法进行绑定
OnSelectedIndexChanged,该事件定义触发更改选择事件函数
Items,该集合存储了ListBox里的项目。可以用Items.Add(str As String)
、Items.Clear()
、Items.Remove(item As String)
、Items.Count
等进行操作。
SelectedIndex,该属性为被选中的最小项的索引号,从0开始,如果为-1则是未选中
GetSelectedIndices,该方法返回当前选定项的索引值的数组
DropDownList 下拉列表框控件
DropDownList控件和ListBox基本一样,只是外观上不同,还就是DropDownList只能单选。
BulletedList 项目列表控件
BulletedList控件可以创建以项目格式列表化的列表项,还可以显示为超链接列表和链接按钮列表。其大部分属性、方法和ListBox一样,
其他常用的属性、方法和事件有:
BulletStyle,项目符号样式,选择有:NotSet不设置、NumbereD数字、LowerAlpha小写字母、UpperAlpha大写字母、LowerRoman小写罗马数字、UpperRoman大写罗马数字、DisC实心圆、Circle空心圆、Square实心正方形、CustomImage自定义图像
DisplayMode,显示模式,选择有:Text文本、HyperLink超链接、LinkButton链接按钮
FirstBulletNumber,列表起始编号
要注意的是,BulletedList的Click事件中,用参数e.Index的值来确定点击的是哪一项。
选择控件
RadioButton 单选按钮控件
RadioButton控件在Web窗体中创建一个单选按钮,若干个单选按钮组成一个互斥的单选按钮组。部分属性,比如AutoPostBack、等同以前的一些控件的属性。
其他常用的属性、方法和事件有:
Checked,是否已被选中
GroupName,组名,所有组名相同的RadioButton被编为一个互斥组
RadioButtonList 单选按钮列表控件
RadioButtonList控件就是一个RadioButton的集合,它可以直接添加选项或者绑定数据源。除非在需要单独设置选项按钮外观时使用RadioButton控件,否则推荐使用RadioButtonList控件。这个控件的一些属性、操作类似于ListBox控件等控件。
其他常用的属性、方法和事件有:
RepeatColumns,显示的列数
RepeatDirection,垂直还是水平显示
RepeatLayout,组内单选按钮的布局
CheckBox 复选框控件和CheckBoxList复选框列表控件
CheckBox控件可以设置条件True或False,从一组中进行单项或多项选择。CheckBoxList控件则是CheckBox控件的RadioButtonList版。 这2个控件除了可多选外,和RadioButton控件、RadioButtonList控件一样。
图形显示控件
Image 图像控件
Image控件用于在页面上显示图像。
ImageMap 图像地图控件
ImageMap控件可以在图像上定义热点(HotSpot)区域,可以通过点击这些区域进行回传或跳转。通常用在需要对图像的局部进行交互时。
其他常用的属性、方法和事件有:
HotSpot,热点区域的集合
HotSpotMode,点击热点的默认行为,选项有:NotSet未设置,默认情况进行跳转到指定Url,未指定则到根目录,PostBack回传,Inactive无操作,Navigate定向,同NotSet
需要注意的事,如果每个热点的行为不同,可以单位为每个热点定义HotSpotMode和其他属性。
容器控件
容器控件是可以容纳放置其他控件的控件。
Panel 面板控件
Panel控件可以对其他控件进行分组,可以在运行时将整个组作为一个单元来处理。
常用的属性、方法和事件有:
DefaultButton,Panel中的默认按钮的ID
Direction,显示方向
ScrollBars,滚动条的可见性和位置
HorizontalAlign,面板内容的水平对齐方式,
通常可以将一组控件放到面板控件中,然后通过设置面板控件的某一属性,批量修改所有包含的控件的属性,比如说Visible可见性。
MultiView 多视图控件
MultiView控件用于定义View视图控件组,可以作为一个或多个View的外部容器。即可以在一个页面中,通过切换看到不同内容,而不用每次都打开一个新窗口。
常用的属性、方法和事件有:
ActiveViewIndex,活动的View的索引,-1为没有
EnableTheming,应用主题
Views,获取View控件集合
CreatedControlCollection,创建ControlCollection以保存子控件
GetActiveView,返回当前活动的View控件
LoadControlState,加载当前状态
SetActiveView,设置为活动View
SaveControlState,保存当前状态
OnActiveViewChanged,触发活动View改变事件
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0" >
<asp:View ID="View1" runat="server">视图1<br />
这里呈现视图1的内容 <br />
<asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True">
<asp:ListItem Value="0" >选项1</asp:ListItem>
<asp:ListItem Value="1" >选项2</asp:ListItem>
<asp:ListItem Value="2" >选项3</asp:ListItem>
<asp:ListItem Value="3" >选项4</asp:ListItem>
</asp:RadioButtonList>
</asp:View>
<asp:View ID="View2" runat="server">视图2<br />
这里呈现视图2的内容 <br />
<asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True">
<asp:ListItem Value="0">选项1</asp:ListItem>
<asp:ListItem Value="1">选项2</asp:ListItem>
<asp:ListItem Value="2">选项3</asp:ListItem>
<asp:ListItem Value="3">选项4</asp:ListItem>
</asp:CheckBoxList>
</asp:View>
</asp:MultiView>
然后可以通过后台程序设置MultiView1.ActiveViewIndex的值显示不同的View。
PlaceHolder 动态容器控件
PlaceHolder控件用于在页面中动态加载其他控件,本身没有基于HTML的输出,仅用于在页面执行期间向该控件的Controls集合中添加其他控件。
常用的属性、方法和事件有:
Controls,获取指定服务器控件的子控件
Site,获取容器信息,用于呈现时承载当前控件
HasControls,确定服务器控件是否包含子控件
添加控件的数量:<br />
<asp:TextBox ID="TextBoxY" runat="server"></asp:TextBox><br />
<asp:Button ID="ButtonY" runat="server" Text="确定" OnClick="ButtonY_Click" /><br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder><br />
Protected Sub ButtonY_Click(sender As Object, e As EventArgs) Handles ButtonY.Click
Try
Dim num As Int16 = Int(TextBoxY.Text)
For i = 1 To num
Dim l As Label = New Label '添加控件
l.ID = "Label" & i.ToString
l.Text = "Label" & i.ToString
Dim t As TextBox = New TextBox '添加控件
t.ID = "TextBox" & i.ToString
t.Text = "TextBox" & i.ToString
Dim b As Button = New Button '添加控件
b.ID = "Button" & i.ToString
b.Text = "Button" & i.ToString
'加载控件
PlaceHolder1.Controls.Add(l)
PlaceHolder1.Controls.Add(t)
PlaceHolder1.Controls.Add(b)
PlaceHolder1.Controls.Add(New LiteralControl("<br />"))
Next
Catch ex As Exception
PlaceHolder1.Controls.Add(New LiteralControl(ex.Message))
End Try
End Sub
此例中通过后台代码向PlaceHolder控件添加了控件,需注意的有:
1、PlaceHolder控件外的TextBox和Button控件ID不是默认的,而加了一个Y,是因为默认ID会和代码生成的TextBox和Button控件ID冲突(页面中可以同时存在ID相同的控件,但是之后的事件之类的识别会混乱)。
2、LiteralControl是一个隐藏控件,用来输出一个HTML元素。因为是控件,所以可以使用PlaceHolder.Controls.Add方法来添加。之所以不用Response.Write方法来添加,是因为PlaceHolder.Controls.Add依次添加在PlaceHolder控件内部,而Response.Write输出到控件外部
其他控件
Calendar 日历控件
Calendar控件可以在页面中显示日历,以便用于选择年月日。该控件必须放在Form或Panel控件内,或者是控件的模板内。Calendar控件显示一个月的日期,还包含了前后各一周,所以显示共6周。
Calendar控件比较复杂,除了基本属性外,其他常用的属性、方法和事件有:
DayNameFormat,日期名称格式,其值是一个名为DayNameFormat的枚举类型,包括FirstLetter、FirstTowLetter、Short、Full、Shortest
FirstDayOfWeek,第一列显示一周中的某天,包括Default、Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday
NextMonthText,下一月导航控件显示的文本,ShowNextPreMonth属性必须设置为True,并且NextPreMonth属性设置为CustomText才有效
NextPrevFormat,标题部分上下个月导航元素的格式,包含ShortMonth、FullMonth及默认值CustomText
SelectedDate,选定日期,默认为当前日期
SelectionMode,日期选择模式,包含Day选择一天、None不能选择、DayWeek选取整个星期或某一天、DayWeekMonth选取整月整星期或一天
ShowGridLines,是否使用网格线分割
ShowNextPrevMonth,是否在标题部分显示上下月导航元素
AddDays、AddWeeks、AddMonths、AddYears,返回与指定DataTime相距指定天、周、月、年的DataTime
GetDayOfWeek、GetDayOfMonth、GetDayOfYear,指定DataTime是周(月、年)中的第几天
GetDaysInMonth、GetDaysInYear,指定月、年中的天数
GetLeapMonth,计算指定年的闰月
IsLeapMonth、IsLeapYear,某月(年)是否是闰月(年)
DayRender事件,Calendar控件每产生一个日期触发
VisibleMonthChanged事件,改变呈现的月份时触发
FileUpload 文件上传控件
FileUpload控件可以向指定目录上传文件。该控件包含一个文本和一个浏览按钮,可以输入文件路径或通过浏览选择。FileUpload控件不会自动上传文件,必须设置相关事件处理程序实现上传。
常用的属性、方法和事件有:
FileBytes,文件的字节数组
FileContent,文件的Stream对象
FileName,文件的在客户端的文件名
HasFile,是否已经包含文件,返回值为布尔类型
Accept,该属性控制了浏览文件的类型,具体的比较多,在下面进行Mark
PostedFile,获取文件相关的HttpPostedFile对象,可以获取相关属性
SaveAs方法,SaveAs(filename As String)
保存文件到服务器,其中filename是服务器绝对路径。通常在事件处理程序中,使用该方法上传文件。在调用SaveAs方法前,应先使用HasFile确认。
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim filesValid As Boolean = False
If FileUpload1.HasFile Then '判断是否有文件
Dim fileExtension As String = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower '获取文件后缀
Dim restrictExtension() As String = {".gif", ".jpg", ".bmp", ".png"}
'判断是否符合判断文件类型是否符合
For i As Int16 = 0 To restrictExtension.Length - 1
If fileExtension = restrictExtension(i) Then
filesValid = True
End If
Next
If filesValid = True Then '文件符合要求
Try
FileUpload1.SaveAs(Server.MapPath("~/images/") & FileUpload1.FileName)
Label1.Text = "上传成功<br /><ul>" '无序列表
Label1.Text = Label1.Text & "<li>原文件路径:" & FileUpload1.PostedFile.FileName & "<br />" '使用PostedFile的FileName能获得客户端上的完整路径,而FileUpload.FileName只是文件名
Label1.Text = Label1.Text & "<li>文件大小:" & FileUpload1.PostedFile.ContentLength & "<br />"
Label1.Text = Label1.Text & "<li>文件类型:" & FileUpload1.PostedFile.ContentType & "<br />"
Label1.Text += "</ul>"
Catch ex As Exception
Label1.Text = "上传失败"
End Try
End If
Dim filePath As String = FileUpload1.PostedFile.FileName '获得上传文件的路径
'生成缩略图
Dim Image, newImage As System.Drawing.Image '定义图形类变量
Image = System.Drawing.Image.FromFile(filePath) '打开图形文件
Dim mycallback As New System.Drawing.Image.GetThumbnailImageAbort(AddressOf ThumbnailCallback) 'GetThumbnailImageAbort将获得返回一个布尔值,当为真时,中断Image.GetThumbnailImage行为。
newImage = Image.GetThumbnailImage(70, 70, mycallback, IntPtr.Zero) '将图形文件压缩到70*70
newImage.Save(Server.MapPath("~/images/" & FileUpload1.FileName & "70_70.jpg")) '保存缩略图
Image.Dispose() '释放资源
newImage.Dispose() '释放资源
Image1.ImageUrl = "~/images/" & FileUpload1.FileName & "70_70.jpg" '显示缩略图
End If
End Sub
Public Function ThumbnailCallback() As Boolean
Return False
End Function
这个例子要注意的有:
1、此例需要Imports System.Drawing
,因为System.Drawing.Image类的相关方法
2、使用System.IO.Path.GetExtension(FileUpload1.FileName).ToLower
获得文件后缀,来和自定义的后缀数组比较。FileUpload1.PostedFile.ContentType
获得的是文件类型,举例:image/jpeg
3、使用FileUpload.PostedFile.FileName
能获得客户端上的完整路径,而FileUpload.FileName
只是文件名
4、FileUpload.SaveAs
方法的参数是服务器的绝对路径,所以使用Server.MapPath("~/images/") & FileUpload.FileName
来生成
5、注意Image.GetThumbnailImage
和Image.GetThumbnailImageAbort
的用法。GetThumbnailImageAbort的参数需要从函数中返回
6、在程序测试时候发生个问题:使用控件选择文件并确定后,IIS Express会自动关闭,进而退出调试模式,没法继续测试程序。试了半天,发现用来测试的360浏览器将极速模式换成兼容模式就可以了。而且极速模式下FileUpload控件的样式也不一样。没有用其他浏览器测试,不知道这个控件的兼容性到底如何。
这里MARK一些东西:
1.accept=“application/msexcel”
2.accept=“application/msword”
3.accept=“application/pdf”
4.accept=“application/poscript”
5.accept=“application/rtf”
6.accept=“application/x-zip-compressed”
7.accept=“audio/basic”
8.accept=“audio/x-aiff”
9.accept=“audio/x-mpeg”
10.accept=“audio/x-pn/realaudio”
11.accept=“audio/x-waw”
12.accept=“image/gif”
13.accept=“image/jpeg”
14.accept=“image/tiff”
15.accept=“image/x-ms-bmp”
16.accept=“image/x-photo-cd”
17.accept=“image/x-png”
18.accept=“image/x-portablebitmap”
19.accept=“image/x-portable-greymap”
20.accept=“image/x-portable-pixmap”
21.accept=“image/x-rgb”
22.accept=“text/html”
23.accept=“text/plain”
24.accept=“video/quicktime”
25.accept=“video/x-mpeg2”
26.accept=“video/x-msvideo”
这些就是Accept属性可以带的一些参数,不过实际测试中,并不是都能够使用。不过可以使用**accept=“.jpg,.bmp,.png,.gif”**这样进行自定义格式。
Login 登录控件
Login控件是一个复合控件,集成了登录验证页面中常用的界面元素和功能。通常情况下,会在页面中呈现3个核心元素,即用户名文本框、密码文本框和提交的按钮。Login控件与成员资格管理功能集成,无须编写任何代码就能够实现用户登录功能。
常用的属性、方法和事件有:
CreateUserText,新用户注册页的链接文本
CreateUserUrl,新用户注册页的地址
DestinationPageUrl,在登录尝试成功时向用户显示的页面的Url
FailureAction,在登录尝试失败时发生的操作
HelpPageText,登录帮助页链接的文本
HelpPageUrl,登录帮助页的Url
InstructionText,用户登录说明文本
LoginButtonText,登录按钮的文本
MembershipProvider,成员资格数据提供程序的名称
UserName,输入的用户名
Password,输入的密码
UserNameLabelText,用户名文本框的标签文本
PasswordLabelText,密码文本框的标签文本
PasswordRecoveryText,密码恢复页链接的文本
PasswordRecoveryUrl,密码恢复页的地址
UserNameRequiredErrorMessage,当用户名字段为空时在ValidationSummary控件中显示的错误信息
PasswordRequiredErrorMessage,当密码字段为空时在ValidationSummary控件中显示的错误信息
RememberMeSet,是否将持久性身份验证Cookie发送到用户的浏览器
RememberMeText,记住我复选框的文本
TitleText,Login控件的标题
VisibleWhenLoggdeIn,登录后是否显示控件
Authenticate事件,在使用Login控件登录后触发,可以进行身份验证
LoggedIn事件,用户登录并验证身份后触发
LoggingIn事件,用户未进行身份验证而提交登录信息时触发
LoginError事件,登录错误时触发
一些需要注意的地方:
1、CreateUserUrl是新用户注册页面的链接地址,CreateUserText是注册页面的文本。如果CreateUserUrl为空则不以链接形式显示文本,如果CreateUserText为空则不提供链接。
2、DestinationPageUrl是登录尝试成功时跳转的页面,它将重写Login控件的默认行为以及配置文件中所做的DefaultUrl设置。
3、FailureAction在登录尝试失败时发生的行为,默认为重新加载页并显示FailureText属性的内容。当FailureAction设置为RedirectToLoginPage时,将重定向到Web.Config定义的登录页。
4、当使用控件登录后,触发Authenticate事件,可以进行身份验证。验证后应把Authenticated属性设置为True,表示已验证。
CreateUserWizard 创建用户向导控件
CreateUserWizard控件用于创建新用户,该控件与成员资格功能紧密集成,能够快速在成员数据库中创建新用户。
常用的属性、方法和事件有:
ActiveStepIndex,显示在控件中的步骤索引,默认从0开始
AutoGeneratePassword,是否为新注册账户生成密码
CompleteSuccessText,成功创建账户后的文本
ConfirmPassword,用户输入的第二个密码
ConfirmPasswordCompareErrorMessage,两个密码不同时显示的错误信息
ConfirmPasswordRequiredErrormessage,第二密码文本框空时所显示的错误信息
ConfirmPasswordLabelText,第二个密码文本框的标签文本
ContinueButtonImageUrl,最终步骤中的“继续”按钮图像地址
ContinueButtonText,最终步骤中的“继续”按钮文本
ContinueDestinationPageUrl,最终步骤中“继续”后的页面
DisableCreatedUser,是否允许新用户登录
DisplayCancelButton,是否显示“取消”按钮
Email,用户输入的邮件地址
EmailRegularExpression,用于验证邮件地址的正则表达式
FinishDestinationPageUrl,完成注册跳转的地址
MembershipProvider,调用的成员资格提供程序
PasswordHintText,描述密码要求的文本
PasswordRegularExpression,用于验证密码的正则表达式,默认值为“”,规则是至少8位,包含大小写数字标点
PasswordRequiredErrorMessage,密码未输所显示的错误信息
Question,密码恢复确认问题
RequireEmail,是否必须填写邮件地址
至此,一些常用的基本的控件就完了。