Asp.Net Unleashed 2nd Edition 学习笔记 第一部分

Part I: Working with ASP.NET Web Forms
Chapter 1. Building ASP.NET Pages
    1.1 ASP.NET and the .NET Framework
    1.2 Introducing ASP.NET Controls
        <input id="username" Runat="Server">中Runat="Server"属性将标准HTML的input标记转换为Server-Side的HTML标记,也就是说在页面返回浏览器之前,这些Server-Side的HTML标记首先在服务器上被执行
        把一个标准HTML文件转换为ASP.NET页面,需要四个方面的改动:
            1. 将文件后缀修改为.aspx
            2. 为每一个form上的元素设定属性Runat="Server"
            3. 不再使用Name属性,而使用ID
            4. 修改form标记,
                原来:<form method="post" action="SimpleASPX.aspx">
                修改后<form Runat="Server">
    1.3 Adding Application Logic to an ASP.NET Page
    1.4 The Structure of an ASP.NET Page
        ASP.NET页面包含有几个大部分:
            Directive,指令,也就是包含在<%@ %>中的部分,指定了Page如何编译
                例如 <%@ Page Language="C#" AutoEventWireUp="false" EnableViewState="false" %>
                具体分为两类:
                    Page Directive:是<%@ Page开头的,用于指定开发语言、跟踪、调试
                    Import Directive:是<%@ Import开头的,因为默认情况下有几个Namespace会自动被import,如果有其他的需要使用的类不在默认被import的Namespace中,就需要使用import指令进行明确的指定
            Code declaration blocks,代码声明块,也就是包含在<script runat="server"> </script>中的部分,
                script接受两个属性设置:
                    一个是Language,用于指定语言,在一个Page下面,所有的Script脚本只能够有一种开发语言
                    一个是Src,用于指定包含有脚本的文件
            ASP.NET controls,也就是控件的声明块,
                需要注意的是,所有的ASP.NET控件必须在<form runat="server>的form中,而且一个Page只能够有一个form声明为runat="server"
            Code render blocks,代码渲染块,如果需要在HTML语句中执行代码,可以使用代码渲染块
                具体分为两类:
                    Inline code:内联代码,包含在<% />之中的代码,就是内联代码,用于执行一个或者一系列指令
                    Inline Expression:内联表达式,包含在<%= />之中的代码,就是内联表达式,用于显示变量或者方法的值
            Server-side comments,注释,包含在<%--和--%>之间的代码块
            Server-side include directives,用于指定Page包含进来哪一个文件
            Literal text and HTML tags,也就是HTML的内容了

Chapter 2. Building Forms with Web Server Controls
    2.1 Building Smart Forms
        Using Label Controls,使用Label,
            属性:
                Text:显示的文字
            方法:无
            事件:无
            Label的内容,也就是Text将会作为<span>标记的内容显示在Page上
        Using the TextBox Control,使用TextBox控件
            TextBox控件可以显示为标准的Html的输入框,可以显示为标准的Html的密码输入框,也可以显示为标准的Html的TextArea
            属性:
                AutoPostBack,如果是True,也就是只要内容一修改,就会post
                Columns/Rows/MaxLength/ReadOnly,最大行数/最大列数/最多文字数/只读
                Wrap,自动换行
                TextMode,
                    可以是SingleLine,对应于标准的Html的输入框
                    可以是Password,对应于标准的Html的密码输入框
                    可以是MultiLine,对应于标准的Html的TextArea
                Text,TextBox输入框中的文本
            方法:无
            事件:
                OnTextChanged,当输入焦点离开对话框的时候,如果TextBox的内容发生了改变,就会post
        Using Button Controls,有三类Button
            Button,标准HTML的Button
                比较重要的地方就是Click和Command的区别。在Button被点击的时候,页面都会post,同时触发Click和Command两个事件。两者的区别是Click事件接收的参数是EventArgs,Command事件接收的是CommandEventArgs,而正是Button的CommandArgument属性作为了Command的CommandEventArgs参数,在Command事件中被处理
                CommandName,作为了Command事件中的判断条件
                CommandArgument,作为了Command事件中的事件参数
            ImageButton,Button上有图片
                比较重要的地方是,ImageButton的Click事件中使用的事件参数是ImageClickEventArgs,而不是普通的EventArgs
            LinkButton,显示为一个超链接的Button
        Using the RadioButton and RadioButtonList Controls,使用RadioButton以及RadioButtonList
            RadioButton重要的属性是GroupName,属于一个Group的所有RadioButton,只能够有一个RadioButton被选择
            RadioButtonList,就是可以简单化的把多个RadioButton放在Page上面
                比较重要的有DataSource/DataMember/DataTextField/DataValueField/SelectedIndex/SelectedItem/SelecedValue
        Using the CheckBox and CheckBoxList Controls
            CheckBox没有什么特殊的,和RadioButton差不多,而且还没有GroupName这个属性
            CheckBoxList,和RadioButtonList差不多,都是可以数据绑定的
        Using the DropDownList Control
            DropDownList,类似于RadioButtonList,下拉框,也是数据绑定的
        Using the ListBox Control
            ListBox,相当于展开化的DropDownList,可以单选可以多选,也是数据绑定的
    2.2 Controlling Page Navigation
        Submitting a Form to a Different Page
            因为ViewState是同一个Page的状态管理,所以,如果要Post到其他页面,可以使用标准的HTML的form标记的Action属性,指定要接收本Page数据的页面URL
        Using the Redirect() Method
            使用Response.Redirect(String URL)方法,可以重定位到其他的页面下面
        Working with the HyperLink Control
            HyperLink比较重要的属性是Target,用于指定HyperLink的目标Frame或者窗体,可选择值有_top/_self/_search/_parent/_blank
    2.3 Applying Formatting to Controls
        Base Web Control Properties
            所有的Web控件都是继承自WebControl类,WebControl类的属性有
                Font-Name/Font-Names/Font-Overline/Font-Size/Font-Strikeout/Font-Underline:用于描述字体的属性
                BackColor/ForeColor:控件上字体后的填充色/字体的填充色
                Height/Width
                BorderWidth/BorderStyle
                AccessKey:有点类似于快捷键的味道,例如Alt+3等等
        Applying Styles to Web Controls,讲解了层叠样式表的使用
            层叠样式表(CSS),使用Control的Style属性来完成设置
            或者呢,将某些Page上的Control共同的Style提取出来,作为一个Css的类,然后在Control的CssClass属性中进行设定
            The Style Class,通过编写程序,利用Style类来完成样式风格的设定
                使用Style类有两个重要的方法,
                    ApplyStyle(),用于覆盖Control的已有的任何Style
                    MergeStyle(),用于和Control现有的任何Style合并

Chapter 3. Performing Form Validation with Validation Controls
    3.1 Using Client-side Validation
        使用Client-side验证,客户体验好,但是未比所有的浏览器都支持,而且未比安全
        使用Server-side验证,是安全了,但是客户体验不好
        而.Net提供的验证控件可以根据Browser的情况,适时的创建验证
        Configuring Client-side Validation
            在安装了FrameWork以后,会有WebUIValidation.js文件被拷贝到asp_client下面,这个文件Client-side验证的脚本
        Enabling and Disabling Client-side Validation
            只要在Page上面放了验证控件,默认的,会把验证脚本发送到客户端
            可以通过directive指令,来禁止Client-side验证 <%@ Page Client-Target="downlevel" %>
            很不幸的,Client-Target="downlevel" 这个指令也会禁止Css等IE4等高版本支持的特性
            所以,可以对验证空间的EnabelClientValidation属性进行指定,如果设置为false,就不进行客户端验证
    3.2 Requiring Fields: The RequiredFieldValidator Control
        RequiredFieldValidator,验证Page上的Control是否输入了值,重要的属性有:
            Display:设置错误信息的显示方式,
                Static,即使没有错误信息,也要占据Page上面的区域
                Dynamic,如果没有错误信息,就不占据Page上面的区域
                None,不显示
            InitValue,设置或者获取待验证的Control的初始值
        在验证的时候,可以对每一个Validator进行IsValid属性验证,也可以对Page的IsValid属性进行验证
        Comparing to an Initial Value
            可以利用Validator的InitValue属性验证Control的值是否被修改了,Validator会根据Validator的InitValue和Control的Value进行匹配,如果相同,就会报错
    3.3 Validating Expressions: The RegularExpressionValidator Control
        RegularExpressionValidator控件,使用正则表达式RegularExpression对控件的值进行验证,重要的属性有:
            ValidationExpression,也就是正则表达式
    3.4 Comparing Values: The CompareValidator Control
        CompareValidator控件,验证Page上面两个Control输入的值是否符合某种运算关系,验证Page上的Control和预先定义值是否符合某种运算关系,重要的属性有:
            ControlToCompare,指定用于验证的Control的ID
            Operator,用于指定比较控件和验证控件的值之间的关系,可以选择的关系有:
                Equal/NotEqual/GreaterThan/GreaterThanEqual/LessThan/LessThanEqual/DataTypeCheck
                其语义是(以GreaterThan为例),ValidatorControl的值是否大于CompareControl的值
                DataTypeCheck值,用于指定CompareValidator控件来完成对Control中的值的数据类型验证
            Type,用于指定被比较的两个值的类型,可以选择的类型有:
                Currency/Date/Integer/String/Double
            ValueToCompare,设定用于比较的值
        要注意的一点是,CompareValidator不会对Control中是否有值进行判定,所以,在某些时候,逻辑上是错误的(Control没有值),但是,验证还是会过去的,也就是IsValid是True,而不是False
        可以使用Operator的DataTypeCheck枚举值和Type的枚举值来进行Control值的数据类型的检测
    3.5 Checking for a Range of Values: The RangeValidator Control
        RangeValidator控件,用于验证Control的值是否在最大值和最小值之间,重要的属性有:
            MaximumValue/MinimumValue,设定最大值/最小值
            Type,设定或者获取用于进行Control值判定时所使用的数据类型,可以选择:
                Currency/Double/Date/Integer/String
        RangeValidator控件,是判断一个Control的值是否在预定的区间内,如果是要判断两个控件的值之间的关系,请使用CompareValidator
    3.6 Summarizing Errors: The ValidationSummary Control
        ValidationSummery控件,用于汇总显示Page上面的所有错误,重要的属性有:
            DisplayMode,设定显示错误汇总的方式,可以选择:
                BulletList/List/SingleParagraph
            HeaderText,设定显示在汇总头部的内容
            ShowMessageBox,如果设定为True,就显示一个MessageBox来提示错误
            ShowSummery,是否允许显示错误汇总
        如果Page中使用了ValidationSummery,那么所有其他的验证控件的ErrorMessage将会显示在ValidationSummery控件上,而验证控件的Text属性,只是指定了显示在被验证Control旁边的提示内容
    3.7 Performing Custom Validation: The CustomValidator Control
        虽然DotNet提供了丰富的验证Control,但是对于客观实际编程环境而言,这些控件是不够的,那么,对于某些时候特殊情况下的验证就需要使用CustomValidator控件了
        CustomValidator控件的重要的属性有:
            ClientValidationFunction,用于指定进行验证的客户端函数,设定的值是一个函数名称
        同时,也可以在Server-Side书写代码完成服务器端验证,在OnServerValidate方法中完成验证工作
    3.8 Disabling Validation
        在Page上,经常有Cancel按钮来取消操作,但是如果有验证控件,那么事情就有一些复杂,因为验证控件是根据焦点的失去而被激活的,如果验证没有过,就会把焦点重新放置在验证控件上
        所以,为了放置这种情况的出现,可以设定Button的CauseValidation属性为false

Chapter 4. Advanced Control Programming
    4.1 Working with View State
        Enabling/Disabling View State
            可以使用Page或者Control上的EnabelViewState属性来允许或者禁止ViewState,从而在Post前后不保存Page上Control的数据
        Adding Values to View State
            ViewState是一个Page级别的成员变量,可以ViewState["UserName"] = "Text";这样来使用ViewState
    4.2 Displaying and Hiding Content
        Using the Visible and Enabled Properties
            使用Control的Visible属性,可以隐藏/显示Control,如果Visible=false,那么Control不会被预处理也不会被render出来
            WebControl还有Enable属性,可以允许/禁止WebControl,如果Enable=false,那么WebControl就灰掉了
        Using the Panel Control
            Panel,使用Visible属性,可以一次隐藏一个Control,如果使用Panel,可以隐藏一组Control,panel重要属性有:
                HorizontalAlign,指定Panel内容的水平对齐方式,可以选择
                    Center/Justify/Left/NotSet/Right
                Wrap,自动换行
            Simulating Multipage Forms
                假设有一个需求,填写一份问卷的,问卷由100道题目组成。100道题目分成了10组
                怎么做呢,可以使用10个Asp.Net页面来完成,但是这样的工作量加大很多,而且,需要花费精力保存所有的状态,这是很费力的
                这个时候,可是使用Panel来完成一种多个页面的模拟工作。在一个Page中,放上10个Panel,每一个Panel用于存放一组题目,通过程序设定每一次的Panel的Visible属性,完成模拟工作。这样,在一个Page下面完成了所有的10组题目,那么保存状态以及编写程序都会方便很多
        Adding Controls Programmatically
            Recursive All Controls in Page
                Control都有Controls属性,是一个数组,提供了一个访问Control的ChildControl的接口
            Adding Controls to a Page
                如果想要给Page增加Control,可以通过Page.Controls数组的Add()方法来完成,如果还有位置要求,可以使用Page.Controls.AddAt()方法来完成
                如果想要给Page移除Control,可以通过Page.Controls数组的Remove()、RemoveAt()以及Clear()方法来完成
            其实不只是Page增/删Control,像Panel等等之类的Control都可以增加或者删除子控件
        The PlaceHolder Control
            直接往Page上面增加Control是可以的,但是一般情况下是不这么做的,而是通过向PlaceHolder控件的Controls中增加Control来完成Control的增加
        Dynamically Generating Forms
            通过利用上面的Adding Controls Programmatically、 The PlaceHolder Control,可以完成动态的产生Page
        Dynamically Generating List Items
            对于DropDownList/RadioButton/ListBox/CheckBoxList这四个Control,可以通过他们的Items属性(类别是ListItemCollection)来完成Item的增加/删除等功能
    4.3 Using Rich Controls
        Displaying Interactive Calendars with the Calendar Control
            通过使用Canlendar控件,可以在Page上面显示日历,Canlendar属性很多,不列举了
            Customizing the Appearance of the Calendar Control
                可以使用继承自WebControl的属性来完成Canlendar的外观定义
                可是使用Canlendar控件本身的属性来完成Canlendar的外观定义
                可以使用Css Style来完成Canlendar的外观定义
            Selecting Days, Weeks, and Months with the Calendar Control
                通过制定Canlendar控件的SelectionMode来指定可以在Canlendar上选择的内容,SelectionMode属性可以选择:
                    Day/DayWeek/DayWeekMonth/None
                通过在SelectionChanged事件中编写代码,可以获取到用户选择的日期,从而进行编程处理
            Rendering Calendar Days
                通过在DayRender事件中书写代码,可以完成自定义化的界面效果,在每一个日期上显示一个自定义的特殊的界面效果
            Creating an Interactive Meeting Scheduler
                一个例子,存储在本地磁盘,使用二维数组,以月、日作为两个坐标轴,存储了某月某天的工作计划,二维数组是通过Cache来维护。在Canlendar的DayRender事件中,根据数组的内容填充内容
        Displaying Banner Advertisements with the AdRotator Control
            通过使用AdRotator控件,来显示广告
            通过建立一个XML文件以及几个图片,设定AdRotator控件的AdvertisementFile属性,完成广告显示的配置工作
        Accepting File Uploads with the HTMLInputFile Control
            HTMLInputFile控件方便用户上传文件,重要属性有
                Accept,一个逗号做为分隔符的字符串,里面是可以上传的文件类型列表
                MaxLength,可以上传的文件的最大尺寸
                PostedFile,是HttpPostedFile类的一个实例,代表了使用HTMLInputFile控件上传的文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值