澳门葡京娱乐ASP.NET MVC 2示例Tailspin Travel UI层分析

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 = new MetaModel();
metaModel.RegisterContext(contextFactory, new ContextConfiguration {
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,也便改成了非容许零长度字符串,而实质上应用被 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(new DynamicDataRoute(“Admin/{table}/{action}”)
            {
                Constraints = new RouteValueDictionary(new { action =
“List|Edit|Details|Insert” }),
                Model = metaModel
            });

routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute
对象来一个参数为
“Admin/{table}/{action}.aspx”,另外还也该目标指定了点滴单属于性值
Constraints 和
Model。把一个后续自Route的DynamicDataRoute添加到Routing规则表中。

Constraints = new RouteValueDictionary(new { action =
“List|Details|Edit|Insert” }) 这句表示约束,这里表示 action 只能是
List、Details、Edit、Insert 中之一个。

足见见,这四个Aciton是针对性诺在DynamicData/PageTemplates文件夹着之季只页面文件。在那么文件夹着还有一个ListDetails.aspx页面文件,是用以”合并页模式”,就是具的操作都见面于平等页中落成。Tailspin
Travel并无启用这个意义。DynamicData 文件夹的称号还是“DynamicData”。

上面的 {table}、{action} 可免得以变动成为我们团结想如果之讳为?

充分的,我们得以看到,上面使用的是 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。

采用DisplayName更改界面的显示,DisplayName
只能用于类、方法、属性、索引、事件

[MetadataType(typeof(CarRentalMetadata))]
    public partial class CarRental
    {
        [ScaffoldTable(false)]
        private class CarRentalMetadata
        {
            [DisplayName(“Pick up”)]
            public object RentalStart { get; set; }

            [DisplayName(“Return”)]
            public object RentalEnd { get; set; }

            [DisplayName(“Pick up Place”)]
            [Required(ErrorMessage = “Please specify where you prefer
to pickup the vehicle.”)]
            public object PickupPlaceId { get; set; }

            [DisplayName(“Return place”)]
            [Required(ErrorMessage = “Please specify where you prefer
to return the vehicle.”)]
            public object ReturnPlaceId { get; set; }

            [DisplayName(“Vehicle”)]
            [Required(ErrorMessage = “Please specify the vehicle
type.”)]
            public object VehicleTypeId { get; set; }
        }
    }

尚得用 UIHint,DataType 改变字段模板

[MetadataType(typeof(FlightMetadata))]
    public partial class Flight
    {
        public Flight()
        {
            this.Id = Guid.NewGuid();
        }

        [DisplayName(“Flights”)]
        private class FlightMetadata
        {
            [ScaffoldColumn(false)]
            public object Id { get; set; }

            [Required]
            public object AirplaneType { get; set; }

            [UIHint(“Time”)]
            public object DepartureTime { get; set; }

            [UIHint(“Time”)]
            [DataType(DataType.Time)]
            public object ArrivalTime { get; set; }

            [DisplayName(“Departure Airport”)]
            public object DepartureAirport { get; set; }

            [DisplayName(“Arrival Airport”)]
            public object ArrivalAirport { get; set; }
        }
    }

DynamicData非常的灵巧,Tailspin
Travel用来应付管理后台的开支方面有所特别大之效率,在前台使用MVC2保证性能,在UI界面的出方面颇值得借鉴之均等栽模式。