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

Tailspin Travel 是叁个骑行预定的应用程序示例,最新版本选取ASP.NET MVC
2技术营造,首要选用 DataAnnotations 验证,
客户端验证和ViewModels,还出示了广大Visual Studio 20拾, .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 七和Windows
Server 200玖 本田UR-V二公布)上运行 ASP.NET
4时接纳。这一个自动运营性子提供了一个可控制的点子来运行三个选取工作经过,开端化ASP.NET
应用,然后接受HTTP请求。具体参看Scott
Guthrie
的文章 VS 2010 和 .NET 四.0
体系之《自动运营ASP.NET应用》篇
,Tailspin
Travel有个类Microsoft.Samples.Tailspin.Web.Infrastructure.ApplicationPreloader,便是用那一个特点预先加载应用程序的缓存。

下边大家来具体分析前台和管制后台:

前台选取ASP.NET MVC
二开发,比较不难,主假使应用ViewModels,HtmlHelper,输出缓存,幸免CSLANDF攻击,查询格局中使用PartialView,以及jQuery和ASP.NET
Ajax合作的相干内容,能够参考 Asp.net MVC2使用经验,质量优化建议学习。

下边重点来证实一下管制后台的DynamicData的构造,先能够阅读一下Scott
Guthrie
的文章
新的ASP.NET动态数据帮助

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

  • 必填字段验证。假若字段不容许为
    NULL,则录入时必须录入数据。可是那里还有待创新,不容许为
    NULL,也就成了不一样意零长度字符串,而事实上行使中 NULL
    和零长度字符串是一回事。尽管不够完善,也曾经为大家减轻不少工作量了。
  • 长度验证。要是字段类型为 nvarchar(拾),那么就不允许超越 10个字符;若是字段类型不是 nvarchar(十),而是
    varchar(10),此时五个汉字也会透过验证,只是不或然入库罢了,会回到错误。
  • 花色验证。比如字段是日期类型,则只允许录入日期。

ASP.NET 动态数据具有电动格式成效:比如 bit
类型的字段呈现为多个多选框,而标识字段不会在插入数据时显得出来。

ASP.NET
动态数据还有着自动识别表关联的意义:比如产品表与产品种类表实行了关系,那么大家在录入产品数据的时候,ASP.NET
动态数据会自动以下拉列表的样式显得产品连串。此成效很是不错。

在网站依旧应用程序模板中有多个Dynamic Data模板,四个是 “Dynamic
Data实人体模型板(Dynamic Data Entities )”它是选拔ADO.net
Entity作为数据模型的,另1个是 “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
对象有3个参数为
“Admin/{table}/{action}.aspx”,其它还为该对象钦定了八个属性值
Constraints 和
Model。把叁个一连自Route的DynamicDataRoute添加到Routing规则表中。

Constraints = new RouteValueDictionary(new { action =
“List|Details|Edit|Insert” }) 那句表示约束,那里表示 action 只能是
List、Details、艾德it、Insert 中的3个。

可以见到,这个Aciton是对应着DynamicData/PageTemplates文件夹中的多少个页面文件。在那文件夹中还有三个ListDetails.aspx页面文件,是用来”合并页方式”,正是有所的操作都会在1页中实现。Tailspin
Travel并不曾启用这么些成效。DynamicData 文件夹的名号都是“DynamicData”。

地点的 {table}、{action} 好倒霉改成大家友好想要的名字呢?

那3个的,大家得以看看,下边使用的是 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用来应付管理后台的支出方面具备十三分高的频率,在前台使用MVC二保障质量,在UI界面包车型大巴开发方面十一分值得借鉴的1种形式。