自学Web开发第九天-基于VB和ASP.NET:服务器控件 (列表控件、选择控件、图形显示控件、容器控件、其他控件)


服务器控件是ASP.NET提供的能够简单快速使用的组件,主要包括 文本控件、按钮控件、列表控件、选择控件、图形显示控件、容器控件、其他控件。上一篇是 文本控件、按钮控件,所以这一篇从 列表控件继续。

列表控件

ListBox列表框控件

ListBox控件是一个静态的列表框,可以添加一组内容列表,以供选择一项或多项。如果列表项总数超出了可以显示的项数,则ListBox控件会自动添加滚动条。另该控件支持数据绑定。

常用的属性、方法和事件有:
ListItem,该元素定义了ListBox控件中的可选项,使用方法如下。要注意的是,显示顺序标签文本>Text属性>Value属性。另TextValue的区别在于,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,列表起始编号

要注意的是,BulletedListClick事件中,用参数e.Index的值来确定点击的是哪一项。

选择控件

RadioButton 单选按钮控件

RadioButton控件在Web窗体中创建一个单选按钮,若干个单选按钮组成一个互斥的单选按钮组。部分属性,比如AutoPostBack、等同以前的一些控件的属性。

其他常用的属性、方法和事件有:
Checked,是否已被选中
GroupName,组名,所有组名相同的RadioButton被编为一个互斥组

RadioButtonList 单选按钮列表控件

RadioButtonList控件就是一个RadioButton的集合,它可以直接添加选项或者绑定数据源。除非在需要单独设置选项按钮外观时使用RadioButton控件,否则推荐使用RadioButtonList控件。这个控件的一些属性、操作类似于ListBox控件等控件。

其他常用的属性、方法和事件有:
RepeatColumns,显示的列数
RepeatDirection,垂直还是水平显示
RepeatLayout,组内单选按钮的布局

CheckBox 复选框控件和CheckBoxList复选框列表控件

CheckBox控件可以设置条件TrueFalse,从一组中进行单项或多项选择。CheckBoxList控件则是CheckBox控件的RadioButtonList版。 这2个控件除了可多选外,和RadioButton控件、RadioButtonList控件一样。

图形显示控件

Image 图像控件

Image控件用于在页面上显示图像。

ImageMap 图像地图控件

ImageMap控件可以在图像上定义热点(HotSpot)区域,可以通过点击这些区域进行回传或跳转。通常用在需要对图像的局部进行交互时。

其他常用的属性、方法和事件有:
HotSpot,热点区域的集合
HotSpotMode,点击热点的默认行为,选项有:NotSet未设置,默认情况进行跳转到指定Url,未指定则到根目录,PostBack回传,Inactive无操作,Navigate定向,同NotSet

需要注意的事,如果每个热点的行为不同,可以单位为每个热点定义HotSpotMode和其他属性。

容器控件

容器控件是可以容纳放置其他控件的控件。

Panel 面板控件

Panel控件可以对其他控件进行分组,可以在运行时将整个组作为一个单元来处理。

常用的属性、方法和事件有:
DefaultButtonPanel中的默认按钮的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控件外的TextBoxButton控件ID不是默认的,而加了一个Y,是因为默认ID会和代码生成的TextBoxButton控件ID冲突(页面中可以同时存在ID相同的控件,但是之后的事件之类的识别会混乱)。
2、LiteralControl是一个隐藏控件,用来输出一个HTML元素。因为是控件,所以可以使用PlaceHolder.Controls.Add方法来添加。之所以不用Response.Write方法来添加,是因为PlaceHolder.Controls.Add依次添加在PlaceHolder控件内部,而Response.Write输出到控件外部

其他控件

Calendar 日历控件

Calendar控件可以在页面中显示日历,以便用于选择年月日。该控件必须放在FormPanel控件内,或者是控件的模板内。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,是否在标题部分显示上下月导航元素
AddDaysAddWeeksAddMonthsAddYears,返回与指定DataTime相距指定天、周、月、年的DataTime
GetDayOfWeekGetDayOfMonthGetDayOfYear,指定DataTime是周(月、年)中的第几天
GetDaysInMonthGetDaysInYear,指定月、年中的天数
GetLeapMonth,计算指定年的闰月
IsLeapMonthIsLeapYear,某月(年)是否是闰月(年)
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.GetThumbnailImageImage.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,记住我复选框的文本
TitleTextLogin控件的标题
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,是否必须填写邮件地址

至此,一些常用的基本的控件就完了。

定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本) 服务端执行的js脚本 数据库访问(反正ODBC支持的库都支持) 自定义的com组件引用 简易说明: 1 建立站点 打开编辑 设置 输入站点名称与路径 点击添加即可建立一个站点 如: myweb c: www 注意路径要以 结尾 在站点根目录下添加filter sjs与endfilter sjs(这是两个必须的过滤器 如无需写代码放两个空文件即可) 2 静态资源与动态页面 在server sjs里的server execFileTypes定义可以配置将哪些文档类型作为动态页面 当请求静态资源时会直接返回资源 当请求一个动态页面时 请求会依次在filter sjs 请求页面 endfilter sjs 进行转发 当然也可以在filter sjs里写代码来终止转发 动态页面中如果文档类型为 sjs服务器将识别为纯的服务端执行js脚本(好比servlet什么的) 在其他类型的动态页面文档中 目前有3种类型嵌入标签可用: <%c %>标签表示嵌入一段服务端执行js脚本 如:<body><%c response responseText+ "hello js"%>< body> 将返回页面<body>hello js< body> <%i %>标签表示引用资源 如:<%i src "parts part htm"%> <% %>标签表示插值 如:<body><% "hello js"%>< body> 将返回页面<body>hello js< body> 3 com组件引用 为了让web应用有更多功能扩展 该服务器可以在脚本中引用其他com组件 这里有2种引用方法 一种方法在设置里面添加引用变量名 组件名 引用类型;来添加其他com组件的引用 组件名写成 组件工程名 组件类名 形式 就像使用CreateObject时一样 引用类型可写sing与muti 其中sing为所有请求共用一个组件实例对象 muti为每个请求引用独立的组件实例对象 另外还可以在代码里使用objectLoader loadComObject attr comNm 来添加组件引用 attr为引用变量名 comNm为组件名 注意:一个新的组件在引用前应先用regsvr32 dll注册">定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值