ASP.NET MVC 2示例Tailspin Travel UI层分析

Tailspin Travel 是3个游览预定的应用程序示例,最新版本接纳ASP.NET MVC
2技术构建,首要行使 DataAnnotations 验证,
客户端验证和ViewModels,还出示了累累Visual Studio 二零零六, .NET Framework
4, 和Windows Server App法布里c的技术,参看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 2010 Rubicon2发表)上运营 ASP.NET
4时使用。这些活动运维天性提供了一个可决定的格局来运转2个使用工作进程,初步化ASP.NET
应用,然后接受HTTP请求。具体参看Scott
Guthrie
的文章 VS 二〇〇九 和 .NET 4.0
体系之《自动运营ASP.NET应用》篇
,Tailspin
Travel有个类Microsoft.萨姆ples.Tailspin.Web.Infrastructure.ApplicationPreloader,正是用那些个性预先加载应用程序的缓存。

上边我们来具体分析前台和管制后台:

前台选取ASP.NET MVC
2开发,比较不难,首固然运用ViewModels,HtmlHelper,输出缓存,防止CS汉兰达F攻击,查询办法中运用PartialView,以及jQuery和ASP.NET
Ajax协作的相干内容,能够参考 Asp.net MVC2
使用经验,质量优化提出
学习。

上面重点来验证一下管制后台的DynamicData的布局,先能够阅读一下Scott
Guthrie
的文章
新的ASP.NET动态数据补助

ASP.NET
动态数据在拓展创办和翻新数据时还会对所录入的数据进行求证,那种验证既发生在客户端也时有发生在服务器端。

  • 必填字段验证。借使字段不允许为
    NULL,则录入时务必录入数据。可是那里还有待革新,差别意为
    NULL,也就成了不允许零长度字符串,而实际上运用中 NULL
    和零长度字符串是三次事。尽管不够周详,也曾经为大家减轻不少工作量了。
  • 长度验证。假如字段类型为 nvarchar(10),那么就区别意抢先 1贰个字符;借使字段类型不是 nvarchar(10),而是
    varchar(10),此时三个汉字也会经过认证,只是不能够入库罢了,会回去错误。
  • 花色验证。比如字段是日期类型,则只允许录入日期。

ASP.NET 动态数据具有自动格式作用:比如 bit
类型的字段突显为二个多选框,而标识字段不会在插入数据时体现出来。

ASP.NET
动态数据还装有自动识别表关联的效益:比如产品表与产品体系表展开了事关,那么大家在录入产品数量的时候,ASP.NET
动态数据会自动以下拉列表的花样显示产品连串。此意义10分科学。

在网站大概应用程序模板中有两个Dynamic Data模板,2个是 “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。把2个三番九回自Route的DynamicDataRoute添加到Routing规则表中。

Constraints = new RouteValueDictionary(new { action =
“List|Details|艾德it|Insert” }) 那句表示约束,那里代表 action 只可以是
List、Details、艾德it、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还有二个高效支付的功底是脚手架,脚手架是一种机制,通过脚手架,我们不必再为每1个表的增多、查看、修改做不一样的页面,因为脚手架会自动生成那么些页面。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界面包车型客车付出方面尤其值得借鉴的一种形式。