AboutAspNet

学习教材:《asp.net unleashed》
我的实验代码位于E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed

注意 asp.net开发出来的项目没有.sln文件可以直接双击打开,asp项目其实就是一个网站,所以打开方式是,打开VS,file > open > website,选择asp.net项目文件夹,想查看项目结果也不是使用V5,而是在相应的页面.aspx上面,右击选择view in the browser。总之,asp.net就是一个网站,以网页为核心的解决方案。

Day 1: 2017.4.12(beginning –page 44: page event)

Sample code: 3420\E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter1 
  1. 可以通过VS top-left control + top-right event快速添加event receiver;

  2. 充分利用vs UI,很多操作可以通过UI来完成,充分利用design 视图,使用UI自动添加一些特性可以加快开发速度。

  3. 多个控件可以绑定到同一个event handler,根据第一个参数判断具体为哪一个。Sender为object类型,在具体控件时可以将其as 为具体的控件。
  4. 在第一条page指令中添加 trace = “true”,可以在页面中显示很多请求和响应的信息。

Day 2: 4.13 page44-page104

Demo code: 3420\E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter2
  1. Checkbox, radiobutton这两个控件的事件响应函数不管autoPost属性有没有开启都会 被执行,但是执行的时间却不一样,当autoPost没有开启的时候,这些响应函数只有在page页面被post 到server后才会被执行;而autopost开启的时候,操作后立即就会被执行。可以这么理解,如果autoPost不开启,那么页面上面的控件操作都是一直等到page post to server后一起被处理的;但是如果autoPost开启,那么这些操作就不管page有没有post都会被处理。autoPost默认是关闭的。一般情况下,为了避免混乱,会关闭autoPost功能,在提交时统一处理,但是特殊情况下,如果不希望某个控件状态的改变引起整个页面的刷新,则可以开启autoPost功能。这里要注意的是,使用submit button处理和控件状态函数改变事件处理函数两者不要重复了。
  2. button click事件会使得整个页面被post到server一次。
  3. 对于一组相同的控件都可以使用同一个事件处理函数,通过sender来判断具体为哪一个,尤其是一组radioButton 时更是方便。
  4. Asp的三种button除了asp control本身的事件之外,还都可以处理client event(即html control event,通过onclientClick来使用Javascript 来进行事件处理,browser执行代码),command event(不再是event,而是onCommand, commandName, commandArgument进行处理,通常相同控件使用同一个,根据参数分别处理)
  5. Cross page post有两种实现方式,第一种直接previousPage.findControl实现;第二种,添加previousPageType指令,直接访问previousPage中定义好的Public property。 Click event 和command有什么区别,都是单击时触发?

    Day 3: 4.14 page104-page151

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter3

  6. ImageMap 利用hotSpot可以实现很多功能, Image的descriptionUrl没有起作用?
  7. Panel中使用scrollBar时,选择auto,而且一定要指定panel control的width, heigh,否则会全部显示。
  8. 六种validation control,一定要注意Page.IsValid的使用。
  9. 默认都是分两层验证的,client validate 和 server validate,如果client没有通过,则根本不会触发post back操作。Client validate默认是开启的,如果不开启,则即便验证没通过也不会显示error text。(why?)

    Day 4: 4.17 page152-page190

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter3

  10. RangeValidator和comparator validator,regulation validator在没有输入值时不会返回error, 也即为空时不进行判断,导致不输入时isValid为true,这一点要注意。custom validator则可以通过evaluateEmptyText属性来设置输入为空时是否验证,而自定义的validation control应该可以自己在代码里决定在输入为空时是否验证。
  11. 自定义validator ,自定义的lengthValidator在其他控件验证没有通过的时候,并没有执行验证操作,只有在其他控件都验证通过时才执行自定义控件的验证操作(why?),这与位置关系无关,只要其他控件存在验证没有通过的,自定义控件就不会执行验证操作。
  12. 注意,验证不通过和未被验证是两个概念,比如rangevalidator在没有输入时是不进行验证的,这个时候isvalid是为true的,但并不意味着是通过了验证。

    Day 5: 4.18 page190-page226

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter4

  13. fileLoad , canlendar,adRoator控件都是可以与database交互的。
  14. 可以使用calender控件作为data picker,并可以通过selectMode来选择不止一天。
  15. 可以使用multiView控件来实现tab pages(结合menu控件实现),将一个form分割为几个form,即step 1, step 2的形式,这种基于multiView控件可以接受command,所以可以使用button设置commandName,有时还需要commandArguments.
  16. 将aspx和logic code分别放在不同的文件中时,不可以通过上方的object来使用UI添加事件响应函数,Properties中可以选择不同的object ,但是发现只有design时可以添加,所以aspx+logic code放在同一个页面中时比较方便。

    Day 6:4.19 page226-page290

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter5+6

  17. Wizard用来将一个form分割为几个小的form,和multiview一样,但是功能比multiview更丰富更强大,wizard step control 为 complete时,是没有任何按钮的,且不属于step的,side bar是不适用于complete的,不知道如何从complete wizard step返回到其他form。
  18. Website-add new item-master page添加master; website-add –web form(勾选master page)创建content page。
  19. Master page中img的url有些复杂,对于asp:Image来说,img url是按照relative to master page来进行解释的;对于html img 来说,则是按照relative to content page来进行解释的;所以一般使用的方法是 html img <img src=’<%=Page.ResolveUrl(“”) %>’ xxx>来实现的 not see?
  20. Content page是asp page的一种,之前创建的empty page为normal asp page。Master page + content page = normal page。其中master page也是可以嵌套的。
  21. Master page中 content placeholder 中的内容会被content page中与此content placeholder绑定的content control中的内容覆盖,content page中所有的内容必须都要位于asp:content里面。
  22. 从content page中修改master page中的内容有四种方法:第一,在content page中的<%page>指令中使用title属性显示content page自己的title;第二,使用master.Header来定义自己的title 和 head style;第三,将master page中想要修改的property定义为public property,在page中使用master.xxproperty进行修改,注意在content page中利用<%masterpageType virtual path=xx>将property转换为特定的类型;第四,使用master.FindControl进行修改。
  23. 动态改变master page可以使用page_PreInit()函数+MasterPageFile来实现,如果想要使得application 里面全部的content page都具有动态加载master的功能,则需要自定一个page类,在此类中重写onPreInit()函数,然后在web.config中将自己定义的类注册为新的base page,这样所有的content page就都具有动态加载master 的功能了。
  24. Theme 用来control appearance,主要包括skin 和 css两种,其中最为推荐的为css。
  25. Theme应该放置在app_theme folder里,每个这里面的folder代表一个theme,且每个theme在后台都被编译成 class,所以theme folder name在命名时要注意不要和已有class冲突。
  26. Theme中的css文件自动应用于每一个page,多个css文件使用时,顺序为css file字母排序,与书写先后无关。

    Day 7:4.20 page290-page356

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter7

  27. User control 和page继承自同一个类,所以两者的property , method等几乎是完全相同的,唯一的不同是,page可以通过browser浏览,user control不可以,必须通过在page中调用才可以,其实user control就是一个control,只是不是asp.net自带的,而是用户创建的;
  28. 在page中使用user control,可以在page中使用%@register 指令进行注册,然后直接使用;也可以在web.config中进行设置,但是使用web.config时要注意user control不可以和page位于同一个文件夹。

  29. 可以将user control中的property /event 暴露出来,外界可以调用和操作;
  30. 可以使用page.LoadControl(), control.controls.Add()来动态加载control,这种动态加载不需要%registe注册,注意,在使用page.loadControl加载到的为control类型,还需要转化为具体的某种control,这时候需要使用reference指令将这种具体的control引用进去,只有转换为了具体的control,就可以调用这种control特用的属性了。

    Day 8:4.21 page356-page395

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter8-9

  31. Data access控件主要有两大类:data bound和data source,data bound又可以分为三大类,每一大类又分很多小类;data source根据数据的来源分为六类。本书第三大部分,从第九章到第十六章是对每一种/类控件的详细介绍。
  32. 每一个data bound control绑定一个data source,可以使用datasourceID进行静态绑定,也可以通过datasoure, databind()动态绑定。
  33. sql server: database 包括两种,server 和 local,其中server database可以理解为在sql mangement中创建的,每个server上面的app都可以连接;local database就是不需要在sql management中创建的,只需要导入.mdb文件到项目中。本书中使用的是local database方式。操作方式如下: 首先将.mdb文件导入到app_data 文件中,然后进行如下操作:server explore中的data connection,右击选择add connection:

添加时要注意选对选项:

然后选择.mdb文件即可:

点击advanced可以查看connection详情:

在asp:datasource中,connection string按照以下方式书写:

Day 9:4.24 page396-page514

Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter10-11  
  1. 在VS中,可以从server explorer的connection-table直接拖动到desigh view中,会自动生成gridview control和 sqldatasource control,而且还会自动添加connection string到config文件中去,非常方便,接下来就可以在这个基础上进行修改,达到自己想要的效果。

  2. 五种list control中,bulletedlistControl是相对功能比较丰富的,可以text, hyperlink, linkButton,还可以对item 进行配置,但是这个控件不支持selected index/item/value。

  3. Gridview是一种很常用的tabular data bound 控件,是以Html table的形式展示的,可以 很方便的支持编辑,删除和排序操作,但是不支持插入。
  4. 排序操作每次都是将整个page post back to server,如果想实现只post back特定内容,可以使用asp:updatepanel控件,背后是ajax技术,使用updatepanel需要使用asp:scriptmanager控件,ajax是使用的javascript。
  5. Gridview有丰富的模板可以用来控制appearance,使用CSS来实现。
  6. Gridview field,用来对应显示database中的column,虽然可以自动生成column,但是却不可以定制,如果要定制每一列的名字,显示等等,都需要使用gridview field。Grid view提供了七种gridview field,其中BoundField是最为常用最为普通的一种,用来显示text;除此外,templateField可以完全进行自定义,template field又分为几种,分别为alternatingitemTemplate, EditItemTemplate, FooterTemplate, HeaderTemplate, InsertItemTemplate, ItemTemplate,适用于不同的场合。
  7. 除了可以最大程度的自定义gridview的显示外,还可以通过grid view event实现各种丰富的功能。GridView events有十多种,其中最常用的有 RowDataBound , raised when each row is bound to data,可以用来highlight special row, master-detail page等等,还有RowCommand, raised when you edit the records。

    Day 10:4.25 page514-page721

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter10-11

  8. 还可以定义自己的grid view field class。
  9. Detailview和 formView都只能用来显示一条的data item,两者都支持显示,编辑,插入,删除,分页等基本功能,且都有custom field , event,类似gridview。这两者的区别在于,detailview默认使用html table显示每一条data item,而formview则完全依赖于template,也即完全是自定义的。
  10. 分页功能中,你可以使用allowPage属性实现自动的page user interface,也可以使用page setting等类似属性设置显示相关的属性,还可以通过使用pageTemplate来实现最高限度的自定义。
  11. Datalist和repeater都可以显示多条data item,且都是template-driven,使用这两个控件时,都要定义Itemtemplate,两者的区别在于 datalist是将整个data source 默认显示为一个html table的,而repeater则没有。
  12. Listview control可以看成是其余几种tabular databound control的集合,具有所有的功能,而且具有最大程度的自定义功能。
  13. dataPager control是用来定义分页功能的控件,可以与任何实现IPageableItemContainer接口的控件合用,目前只有Listview实现了,因此目前只能和listview控件一起使用。
  14. chart control用来对数据进行图像化显示,核心component 为 series, chartarea,有很丰富的自定制显示,而且可以实现chart data point clickable,可以实现3D显示效果。
  15. queryExtender control其实就是简化实现负责的查询功能,一般的查询需要我们到后台书写查询语句,queryextender 可以不用我们书写任何后台查询语句就可以进行一些复杂的查询功能。

    Day 11:4.26 page721-page787

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter17-18

  16. component即为class,每个component都要放在app_code文件夹里面,且放在这里的class会自动编译,每次进行任意一个page request时都会自动编译coponent,这也导致任何一个component出现错误都会导致任何一个page load,即便这个page没有用到这个component,如果要阻止这种情况发生,可以将不需要编译的component修改一些asp不认得的后缀名,可以使得这些component不被编译。
  17. 多个component可以编译为一个assembly,也即.dll文件,若想跨app调用assembly,有两种方法可以考虑,第一将所调用的.dll拷贝进bin folder;第二将所调用的.dll install进GAC。第一种比较灵活。
  18. Asp常用的架构为三层架构: user interface(.aspx),DAL(data access),BLL(.cs)三层。

    Day 12:4.27 page787-page950

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\chapter18-19

  19. objectDataSource 其实就是一个链接,一个媒介,将DAL 数据层和BLL逻辑层连接起来,而objectDatasource control则是放在user interface层的。
  20. objectDatasource通过typeName制定所要代表的component;selectMode等代表操作方法。
  21. objectDatasource可以代表任何的object,也即可以连接任何的数据形式和数据来源,包括collection, ado.net datareader, ado.net dataset,weservice等等。
  22. objectDatasource还有很多事件可以去处理来实现很多功能;
  23. 使用AND.NET连接数据库,有两种模式:connected, disconnected,其中第一种方式比第二种更快,使用更多,但是第二种可以提供更多独特的功能,如果没有特殊原因,推荐使用第一种方式,因为第二种是in-memory operation,会耗费更多时间和资源。
  24. Connected 核心类connection, command, datareader,实际应用中并不直接使用这几个类,而是针对不同的数据库使用不同的类,比如针对sql server,使用的是sqlConnection, sqlCommand, sqlDatareader。
  25. Disconnected 核心类: dataAdapter, dataTable, dataView, dataSet。
  26. 可以异步执行db command。
  27. 自动属性:输入 prop,点击两次tab 健即可,但是自动属性不可以添加getter, setter。

    Day 13:4.28 chapter20-chapter27

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\

  28. siteNavigation 部分主要讲解siteMap机制和三种控件的使用:siteMapPath, menu, TreeView。siteMapPath可以自动连接xx.sitemap文件;menu和treeView几乎完全相同,不能够自动连接.sitemap文件,需要通过siteMapDatasource实现,除了site map外,还可以使用item,连接xml(xmlDatasource), database等数据形式,在连接database时,不可以使用现有控件,必须创建自己的data source控件,或者使用代码实现。除此外还介绍了asp.net url routing机制。
  29. security部分讲解了login系列控件的使用和背后的实现机制membership。

    Day 14:5.2 chapter28-chapter32

    Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\

  30. HTTP 是一个stateless request,即分不清两个请求是不是来自同一个网页,为了maintain state,讲解了三种方式: cookie, session, profile。
  31. cookie是轻量级的,保存在web browser,数目和大小都有限制,只可以保存简单的string value,使用response.cookies[cookieName].value进行创建和修改,使用request.cookies[cookieName].value进行读取。
  32. Session比cookie更强大些,可以储存更为复杂的内容,且没有大小限制,保存在web server中,默认是依赖于cookie来实现的,也可以使用cookieless session。
  33. Profile功能更为强大,相当于一个类,可以在config文件中直接定义property来创建,也可以创建一个class来实现,可以用来存储非常复杂的对象。为provider模式,默认的provider为sqlProfileProvider,即profile的内容默认保存在SQL server database中的,也可以自定义profileprovider。
  34. Asp.net中常用的几种cache为: output page cache, partial page cache, data source cache, data cache。
  35. Output page cache,为entire page cache,添加指令outputCache来完成,可以根据参数,文件,浏览器,自定义函数等的变化产生新的cache version。
  36. Partial page cache,网页的特定部分cache,有两种实现方式:post-substituation 和 user control。Post-substitution使得除去substitution外的网页部分都进行cache;user control则是位于user control内的部分进行cache。
  37. Data source cache,主要是针对sqldatasource, objectdatasource, xmldatasource三种datasource控件而言的。
  38. Data cache是所有asp.net cache的最基本的机制,每个asp.net application 都有一个cache object,可以使用cache的属性和方法对其进行设置。
  39. Localize page主要的两个属性:UICulture, Culture
  40. 可以利用local resource file和global resource file。
  41. Localize control,继承自literal control。 ### Day 15:5.3 chapter33-end Demo code:3420\ E:\SSHZ\LiuXin\About ASP.net\ASP.NET unleashed\

  42. Asp的config是层次关系,每个folder或者subfolder都可以有自己的config file,低层次的config会覆盖高层次中相对应的属性值,如果想避免这种覆盖,可以使用lock方法将其封锁,具体可以参考相关章节。
  43. Config文件操作的核心是configuration API,其中核心类为webConfigurationManager和configuration 类。
  44. 打开配置文件可以使用webConfigurationManager.openMachineconfiguration/openWebConfiguration方法,这两个方法既可以打开本地也可以打开remote server config文件。
  45. 打开之后可以使用GetApplicationSection/GetSection方法获取具体的configuration section,但是因为configuration是层次关系,所以前一个方法获取的是root web config中的section,要想获取更具体的需要使用getSection方法,这两个方法得到的都是configuration实例。
  46. Configuration类有很多方法和属性可以用来使用:GetSection(),GetSectionGroup(),Sections,SectionGroups等。
  47. Configuration section分为section Group和section两种,每个section都分别对应一个类,利用这些类进行修改等具体的操作。
  48. 部署asp.net app时,首先,要通过project-properties-web tab –servers将host web从VS改为IIS。VS部署有两种方法。

右击项目名称:

  1. 第一种是package,先打包成.zip文件,然后将.zip文件拷贝到目标server上面,打开IIS,default web右击-deploy-import app即可。

  2. 第二种是one click publish,这种方法要求目标server上面安装有web deploy,这种方法很简单,publish,填写必要的值即可。

  3. Asp.net为server-side application,任何微小的操作都会引起post back to server。为了提高效率和用户体验,可以采用ajax技术,有两种使用方法:server-side ajax, client-side ajax。
  4. Server-side ajax即使用运用了ajax技术的控件,优点是使用方便,不需要任何java script,缺点是归根结底还是需要post back to server side to process。主要为updatePanel控件,此外有两个辅助控件:timer, updateprogress。Timer 控件可以固定时间间隔更新updatePanel控件的内容;updateprogress控件可以显示updatePanel控件的进程。
  5. 除了updatePanel控件外,asp.net ajax control toolkit也提供了很多使用ajax技术的控件。
  6. Client-side ajax即使用java script实现的app,也可称为ajax app,ajax app的user interface layer位于web browser,logic 和data access layer位于server,browser和server的交互通过web service实现。