• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 议论ASP.NET中Tailspin TravelUI层奇特

      在这里我们将从一个实例为大家理会ASP.NET MVC 2中的Tailspin Travel UI层,51CTO也向您引荐专访微软MVP衣明志:走进ASP.NET MVC 2框架拓荒。以便于大家更好的邃晓ASP.NET MVC。

        Tailspin Travel 是一个旅游预订的应用递次示例,最新版本收受吸收ASP.NET MVC 2技术构建,主要应用 DataAnnotations 考据, 客户端考据和ViewModels,还展现了许多Visual Studio 2010, .NET Framework 4, 和Windows Server AppFabric的技术,参看ASP.NET MVC 2示例Tailspin Travel。

        Tailspin Travel想象的技术对照多,今天我们来看看界面(UI)上的技术,在UI层上来说主要收受吸收的技术是ASP.NET MVC2和ASP.NET DynamicData框架。从遵守上来分为向普通用户供给的前台页面和管理员应用的配景界面,前台页面主要完成的是旅游活动日程支配,航班,旅社,租车这几部分收受吸收的ASP.NET MVC 2技术,管理员用的配景管理页面应用的是ASP.NET DynamicData拓荒的,这两种技术在网站里的应用有示范作用,关于管理员应用的配景的访问量弗成能很大,网站的主要流量是普通用户应用的前台页面,组合应用这两个框架,可以也许也许也许也许也许加快网站的拓荒。

        组合这两种技术,就会碰到一些的问题,第一个问题就是ASP.NET 动态数据(Dynamic Data )默许情况下,动态数据放在web应用的动态数据目录(DynamicData)里,该目录竖立在根目录处。你的应用需要移动的不合的职位。 在Tailspin Travel内中是“admin”目录,动态数据就在这个目录下,然后在Globa.asax.cs文件里

        var metaModel =newMetaModel(); metaModel.RegisterContext(contextFactory, newContextConfiguration { ScaffoldAllTables =true}); metaModel.DynamicDataFolderVirtualPath ="~/Admin/DynamicData/"

        改变admin/Dynamicdata 下文件的内容的引用到新的门路((~/admin/Dynamicdata)

        歧:

        A、修改List.aspx和ListDetails.aspx 的注册指令的src属性。

        B、修改 List.aspx 和母版页的img 的src属性。

        C、任何自定义的必须应用新门路的内容。

        ASP.NET 4.0有个新特性叫做“自动启动应用递次”,自动启动,先行初始化web应用,而没必要等待外部客户端访问web服务器时才启动的能力。这可以也许也许也许也许也许有助于你给第一个访问者供给一个更快的中兴体验,阻止撰写定制脚正本“预热(warm up)”服务器和准备好任何数据缓存。它可用于任何类型的ASP.NET应用,收罗基于ASP.NET Web Forms和ASP.NET MVC的应用。不过请求在IIS 7.5(随Windows 7和Windows Server 2008 R2宣告)上运转 ASP.NET 4时应用。这个自动启动特性供给了一个可掌握的体式款式来启动一个应用事项进程,初始化ASP.NET 应用,然后吸收HTTP请求。细致参看Scott Guthrie 的文章 VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇,Tailspin Travel有个类 Microsoft.Samples.Tailspin.Web.Infrastructure.ApplicationPreloader,就是用这个特性预先加载应用递次的缓存。

        下面我们来细致理会前台和管理配景:

        前台收受吸收ASP.NET MVC 2拓荒,对照质朴,重如果应用ViewModels,HtmlHelper,输出缓存,阻止CSRF进击,查询方法中应用PartialView,和 jQuery和ASP.NET Ajax合营的相关内容,可以也许也许也许也许也许参考 Asp.net MVC2 应用经验,性能优化提议学习。

        下面重点来说明一下管理配景的DynamicData的组织,先可以也许也许也许也许也许阅读一下Scott Guthrie 的文章 新的ASP.NET动态数据支持:

        ASP.NET 动态数据在举办竖立和更新数据时还会对所录入的数据举办考据,这类考据既发生在客户端也发生在服务器端。

        必填字段考据。如果字段不准可为 NULL,则录入时必须录入数据。不过这里尚有待刷新,不准可为 NULL,

      详解VB.NET对象阅读器作用展现
      VB.Net调用存储进程并取得返回值,详解VB.NET对象阅读器作用展现,老生常谈:从VB6迁移到VB.net,VB.net2008精彩实例,

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增垃圾回收器G1特性,Java按字节长度截取字符串,Java解析XML文件的四种方法,Java和.NET互操作:应该放弃Web Service吗,Java源代码的折行规则,JAVA进阶:一个简单Thread缓冲池的实现,Java语言中Timer类的简洁用法,JAVA进阶:一个简单Thread缓冲池的实现,JAVA进阶:一个简单Thread缓冲池的实现,Java Swing中键盘事件的处理,Java多线程设计模式:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中获取该项目的相对路径方法,JAVA高手解析XML配置文件的读取操作,java操作Excel的一种方法,JDK5的ProcessBuilder介绍和使用实例,一个Java程序员应该掌握的10项技能,获取java线程中信息的两种方法,Java语言中内存管理的几个技巧
      JAVA

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增残余收受接受器G1特性,Java按字节长度截取字符串,Java理会XML文件的四种方法,Java和.NET互支配:应该摒弃Web Service吗,Java源代码的折行规定礼貌,JAVA进阶:一个俭朴Thread缓冲池的完成,Java语言中Timer类的繁复用法,JAVA进阶:一个俭朴Thread缓冲池的完成,JAVA进阶:一个俭朴Thread缓冲池的完成,Java Swing中键盘事件的措置责罚,Java多线程想象情势:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中猎取该项目的相对路径方法,JAVA能手理会XML配置文件的读取支配,java支配Excel的一种方法,JDK5的ProcessBuilder引见和应用实例,一个Java顺序员应该掌握的10项妙技,猎取java线程中信息的两种方法,Java语言中内存管理的几个妙技
      JAVA

      窗体应用妙技,用VB.net2008打造你的影音播放器,一个Office 2003风格的照顾控件(VB.NET),在VB.NET中支配MySQL数据库,vb.net开荒中应用excel插件的代码,vb.net封装组件成com的方法,.NET情况下几种不合的邮件发送解决方案,用.net动态竖立类的实例,VB.NET完成DataList横向数据交替变色,在VB.Net中竖立应用控件数组,在Visual Basic .NET 中完成配景进程,VB.NET中应用Directsound9之质朴播放,用新VB.NET 排列提高效能,在有Clipboard的应用递次间移动数据,VB.NET中的变量范围差异,从Visual Basic 6.0 到 Visual Basic.NET 的转换,微软.Net递次想象FAQ
      VB.net

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增盈余收受接受器G1特性,Java按字节长度截取字符串,Java理会XML文件的四种方法,Java和.NET互支配:应该摒弃Web Service吗,Java源代码的折行规定礼貌,JAVA进阶:一个质朴Thread缓冲池的完成,Java语言中Timer类的繁复用法,JAVA进阶:一个质朴Thread缓冲池的完成,JAVA进阶:一个质朴Thread缓冲池的完成,Java Swing中键盘事件的措置责罚,Java多线程想象情势:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中猎取该项目的相对路径方法,JAVA能手理会XML配置文件的读取支配,java支配Excel的一种方法,JDK5的ProcessBuilder引见和应用实例,一个Java递次员应该掌握的10项妙技,猎取java线程中信息的两种方法,Java语言中内存管理的几个妙技
      JAVA

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增盈余收受吸收器G1特性,Java按字节长度截取字符串,Java理会XML文件的四种方法,Java和.NET互支配:应该摒弃Web Service吗,Java源代码的折行规定礼貌,JAVA进阶:一个质朴Thread缓冲池的完成,Java语言中Timer类的繁复用法,JAVA进阶:一个质朴Thread缓冲池的完成,JAVA进阶:一个质朴Thread缓冲池的完成,Java Swing中键盘事件的措置责罚,Java多线程想象情势:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中猎取该项目的相对路径方法,JAVA能手理会XML配置文件的读取支配,java支配Excel的一种方法,JDK5的ProcessBuilder引见和应用实例,一个Java递次员应该掌握的10项妙技,猎取java线程中信息的两种方法,Java语言中内存管理的几个妙技
      JAVA

      也就成了不准可零长度字符串,而实际应用中 NULL 和零长度字符串是两回事。纵然缺少美满,也已为我们减轻许多事项量了。

        长度考据。如果字段类型为 nvarchar(10),那么就不准可高出 10 个字符;如果字段类型不是 nvarchar(10),而是 varchar(10),此时六个汉字也会经过进程考据,只是没法入库罢了,会返回缺点。

        类型考据。比如字段是日期类型,则只允许录入日期。

        ASP.NET 动态数据具有自动名堂遵守:比如 bit 类型的字段展现为一个多选框,而标识字段不会在插进去数据时展现出来。

        ASP.NET 动态数据还具有自动识别表联络相关的遵守:比如产品表与产品种别表举办了联络相关,那么我们在录入产品数据的时候,ASP.NET 动态数据会自动以下拉列表的情势展现产品种别。此遵守非常不错。

        在网站也许应用递次模板中有两个Dynamic Data模板,一个是 "Dynamic Data实体模板(Dynamic Data Entities )"它是应用ADO.net Entity作为数据模型的,另一个是 "Dynamic Data 模板",他是应用LINQ TO SQL 来作为数据模型。Tailspin Travel 是以Entity Framework作为数据模型的。

        Dynamic Data也应用了Routing:

        routes.Add(newDynamicDataRoute("Admin//") { Constraints =newRouteValueDictionary(new{ action ="List|Edit|Details|Insert"}), Model =metaModel });

        routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute 对象有一个参数为 "Admin//.aspx",其他还为该对象指定了两个属性值 Constraints 和 Model。把一个继承自Route的DynamicDataRoute添加到Routing规定礼貌表中。

        Constraints =newRouteValueDictionary(new{ action ="List|Details|Edit|Insert"})

        这句泄漏展现约束,这里泄漏展现 action 只能是 List、Details、Edit、Insert 中的一个。

        可以也许也许也许也许也许看出,这四个Aciton是对应着DynamicData/PageTemplates文件夹中的四个页面文件。在那文件夹中尚有一个 ListDetails.aspx页面文件,是用于"吞并页情势",就是统统的支配都会在一页中完成。Tailspin Travel并没有启用这个遵守。DynamicData 文件夹的称呼都是“DynamicData”。

        上面的 、 可弗成以也许改成我们自身想要的名字呢?

        弗成的,我们可以也许也许也许也许也许看到,上面应用的是 DynamicDataRoute 类,而不是 Route 类,DynamicDataRoute 继承于 Route,Table 和 Action 属性是 DynamicDataRoute 特有的。

        DynamicData/Content/GridViewPager.ascx 分页控件。

        DynamicData/Content/FilterUserControl.ascx 在展现表中的数据时,该控件展如今表头,用以过滤表中的内容,比如可以也许也许也许也许也许只列表产品目录为“实用工具”的产品。

        DynamicData/CustomPages 文件夹。自定义网页模板文件夹,可用以替换 DynamicData/PageTemplates 文件夹中的默许模板。

        DynamicData/FieldTemplates 文件夹。收罗种种类型的字段在审查和竖立、编辑时所展现的控件。

        DynamicData/PageTemplates 文件夹。收罗在举办审查、编辑时的页面模板。

        Dynamic Data尚有一个快速拓荒的基础是脚手架,脚手架是一种机制,经过进程脚手架,我们没必要再为每一个表的增加、审查、修改做不合的页面,因为脚手架会自动生成这些页面。Tailspin Travel对统统表都启用脚手架,对统统表启用脚手架泄漏展现公开了悉数数据模型:

        metaModel.RegisterContext(contextFactory, new ContextConfiguration { ScaffoldAllTables = true });

        还可以也许也许也许也许也许对特定表启用脚手架遵守,这时候就要将上面的ScaffoldAllTables = false,然后给模型类打标签 [System.ComponentModel.DataAnnotations.ScaffoldTable(true)]

        自动生成的网站需要我们调整的页面,需要竖立自定义的页面可以也许也许也许也许也许把它放在DynamicData/CustomPages 文件夹,在 DynamicData/CustomPages/ 下新建一个文件夹,称呼为 FlightBookings,这个称呼一定要与 Tailspin.edmx中的相应表的分部类称呼一样。然后将 DynamicData/PageTemplates/ 下的文件复制到 DynamicData/CustomPages/FlightBookings/。

        更改新模板文件中的类名。

        比如将类称呼 List 改成 DynamicDataTest.FlightBookingsList。

        [MetadataType(typeof(CarRentalMetadata))] publicpartialclassCarRental { [ScaffoldTable(false)] privateclassCarRentalMetadata { [DisplayName("Pick up")] publicobjectRentalStart { getset} [DisplayName("Return")] publicobjectRentalEnd { getset} [DisplayName("Pick up Place")] [Required(ErrorMessage ="Please specify where you prefer to pickup the vehicle.")] publicobjectPickupPlaceId { getset} [DisplayName("Return place")] [Required(ErrorMessage ="Please specify where you prefer to return the vehicle.")] publicobjectReturnPlaceId { getset} [DisplayName("Vehicle")] [Required(ErrorMessage ="Please specify the vehicle type.")] publicobjectVehicleTypeId { getset} } } 还可以也许也许也许也许也许用 UIHint,DataType

        应用DisplayName更改界面的展现,DisplayName 只能用于类、方法、属性、索引、事件

        改变字段模板

        [MetadataType(typeof(FlightMetadata))] publicpartialclassFlight { publicFlight() { this.Id =Guid.NewGuid(); } [DisplayName("Flights")] privateclassFlightMetadata { [ScaffoldColumn(false)] publicobjectId { getset} [Required] publicobjectAirplaneType { getset} [UIHint("Time")] publicobjectDepartureTime { getset} [UIHint("Time")] [DataType(DataType.Time)] publicobjectArrivalTime { getset} [DisplayName("Departure Airport")] publicobjectDepartureAirport { getset} [DisplayName("Arrival Airport")] publicobjectArrivalAirport { getset} } } DynamicData

        非常的无邪,Tailspin Travel用来敷衍管理配景的拓荒方面具有非常高的效能,在前台应用MVC2担保性能,在UI界面的拓荒方面非常值得自创的一种情势。

      详解VB.NET对象阅读器作用展现
      VB.Net调用存储进程并取得返回值,详解VB.NET对象阅读器作用展现,老生常谈:从VB6迁移到VB.net,VB.net2008精彩实例,窗体应用妙技,用VB.net2008打造你的影音播放器,一个Office 2003风格的照顾控件(VB.NET),在VB.NET中支配MySQL数据库,vb.net拓荒中应用excel插件的代码,vb.net封装组件成com的方法,.NET情况下几种不合的邮件发送解决方案,用.net动态竖立类的实例,VB.NET完成DataList横向数据交替变色,在VB.Net中竖立应用控件数组,在Visual Basic .NET 中完成配景进程,VB.NET中应用Directsound9之质朴播放,用新VB.NET 排列提高效能,在有Clipboard的应用递次间移动数据,VB.NET中的变量范围差异,从Visual Basic 6.0 到 Visual Basic.NET 的转换,微软.Net递次想象FAQ
      VB.net

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增盈余收受接受器G1特性,Java按字节长度截取字符串,Java理会XML文件的四种方法,Java和.NET互支配:应该摒弃Web Service吗,Java源代码的折行规定礼貌,JAVA进阶:一个质朴Thread缓冲池的完成,Java语言中Timer类的繁复用法,JAVA进阶:一个质朴Thread缓冲池的完成,JAVA进阶:一个质朴Thread缓冲池的完成,Java Swing中键盘事件的措置责罚,Java多线程想象情势:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中猎取该项目的相对路径方法,JAVA能手理会XML配置文件的读取支配,java支配Excel的一种方法,JDK5的ProcessBuilder引见和应用实例,一个Java递次员应该掌握的10项妙技,猎取java线程中信息的两种方法,Java语言中内存管理的几个妙技
      JAVA

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增盈余收受接受器G1特性,Java按字节长度截取字符串,Java理会XML文件的四种方法,Java和.NET互支配:应该摒弃Web Service吗,Java源代码的折行规定礼貌,JAVA进阶:一个质朴Thread缓冲池的完成,Java语言中Timer类的繁复用法,JAVA进阶:一个质朴Thread缓冲池的完成,JAVA进阶:一个质朴Thread缓冲池的完成,Java Swing中键盘事件的措置责罚,Java多线程想象情势:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中猎取该项目的相对路径方法,JAVA能手理会XML配置文件的读取支配,java支配Excel的一种方法,JDK5的ProcessBuilder引见和应用实例,一个Java递次员应该掌握的10项妙技,猎取java线程中信息的两种方法,Java语言中内存管理的几个妙技
      JAVA

      详解VB.NET对象阅读器作用展现
      VB.Net调用存储进程并取得返回值,详解VB.NET对象阅读器作用显示,老生常谈:从VB6迁移到VB.net,VB.net2008精彩实例,窗体应用妙技,用VB.net2008打造你的影音播放器,一个Office 2003风格的照顾控件(VB.NET),在VB.NET中支配MySQL数据库,vb.net拓荒中应用excel插件的代码,vb.net封装组件成com的方法,.NET情况下几种不合的邮件发送解决方案,用.net动态竖立类的实例,VB.NET完成DataList横向数据交替变色,在VB.Net中竖立应用控件数组,在Visual Basic .NET 中完成配景进程,VB.NET中应用Directsound9之俭朴播放,用新VB.NET 排列提高效能,在有Clipboard的应用顺序间移动数据,VB.NET中的变量范围差异,从Visual Basic 6.0 到 Visual Basic.NET 的转换,微软.Net顺序想象FAQ
      VB.net

      JAVA中sleep()、wait()、yield()、join()方法浅析
      JAVA中sleep()、wait()、yield()、join()方法浅析,探秘Java 7新增垃圾回收器G1特性,Java按字节长度截取字符串,Java解析XML文件的四种方法,Java和.NET互操作:应该放弃Web Service吗,Java源代码的折行规则,JAVA进阶:一个简单Thread缓冲池的实现,Java语言中Timer类的简洁用法,JAVA进阶:一个简单Thread缓冲池的实现,JAVA进阶:一个简单Thread缓冲池的实现,Java Swing中键盘事件的处理,Java多线程设计模式:了解wait/notify机制,JAVA基础:解读内存优化编程,JAVA文件中获取该项目的相对路径方法,JAVA高手解析XML配置文件的读取操作,java操作Excel的一种方法,JDK5的ProcessBuilder介绍和使用实例,一个Java程序员应该掌握的10项技能,获取java线程中信息的两种方法,Java语言中内存管理的几个技巧
      JAVA

    • 0
    • 0
    • 0
    • 83
    • 单栏布局 侧栏位置: