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

var metaModel = new MetaModel();
metaModel.RegisterContext(contextFactory, new ContextConfiguration {
ScaffoldAllTables = true });
metaModel.DynamicDataFolderVirtualPath = “~/Admin/DynamicData/”;

ASP.NET
动态数据还兼具电动识别表关联的效能:比如产品表与产品序列表展开了事关,那么我们在录入产品数量的时候,ASP.NET
动态数据会自动以下拉列表的款型体现产品序列。此功用相当正确。

DynamicData非凡的利落,Tailspin
Travel用来对付管理后台的支付方面负有特别高的效能,在前台使用MVC2保证性能,在UI界面的付出方面卓殊值得借鉴的一种形式。

  • 必填字段验证。如若字段不容许为
    NULL,则录入时必须录入数据。然则这里还有待改革,不允许为
    NULL,也就成了不容许零长度字符串,而实质上行使中 NULL
    和零长度字符串是两次事。虽然不够周全,也早已为大家减轻不少工作量了。
  • 长度验证。假使字段类型为 nvarchar(10),那么就不允许超越 10
    个字符;假使字段类型不是 nvarchar(10),而是
    varchar(10),此时多个汉字也会经过认证,只是无法入库罢了,会回来错误。
  • 连串验证。比如字段是日期类型,则只允许录入日期。

Tailspin Travel 是一个环游预订的应用程序示例,最新版本选拔ASP.NET MVC
2技术构建,首要选择 DataAnnotations 验证,
客户端验证和ViewModels,还显得了广大Visual Studio 2010, .NET Framework
4, 和Windows Server AppFabric的技艺,参看ASP.NET MVC 2示例Tailspin
Travel

还足以用 UIHint,DataType 改变字段模板

仍可以够对一定表启用脚手架功能,这时就要将方面的ScaffoldAllTables =
false,然后给模型类打标签[System.ComponentModel.DataAnnotations.ScaffoldTable(true)]

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

DynamicData/Content/FilterUserControl.ascx
在彰显表中的多寡时,该控件显示在表头,用以过滤表中的内容,比如能够只列表产品目录为“实用工具”的出品。

Tailspin
Travel设计的技巧相比多,今日我们来看看界面(UI)上的技艺,在UI层上的话根本使用的技能是ASP.NET
MVC2和ASP.NET
DynamicData框架。从效率上来分为向普通用户提供的前台页面和领队使用的后台界面,前台页面首要实现的是环游活动日程安排,航班,旅舍,租车这几片段接纳的ASP.NET
MVC 2技术,管理员用的后台管理页面使用的是ASP.NET
DynamicData开发的,这两种技术在网站里的运用有示范效能,对于管理员使用的后台的访问量不容许很大,网站的第顶尖量是普通用户使用的前台页面,组合使用这六个框架,可以加速网站的支出。

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

ASP.NET
动态数据在展开创办和更新数据时还会对所录入的数码开展表达,这种验证既暴发在客户端也发出在劳务器端。

地点的 {table}、{action} 行依旧不行改成我们友好想要的名字吧?

自动生成的网站需要我们调整的页面,需要创建自定义的页面能够把它置身DynamicData/CustomPages
文件夹,在 DynamicData/CustomPages/ 下新建一个文件夹,名称为
FlightBookings,这么些称谓一定要与
Tailspin.edmx中的相应表的分部类名称一致。然后将
DynamicData/PageTemplates/ 下的文本复制到
DynamicData/CustomPages/FlightBookings/。

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

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,就是用这么些特点预先加载应用程序的缓存。

            routes.Add(new DynamicDataRoute(“Admin/{table}/{action}”)
            {
                Constraints = new RouteValueDictionary(new { action =
“List|Edit|Details|Insert” }),
                Model = metaModel
            });

上边大家来具体分析前台和管理后台:

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

结合这二种技术,就会碰着一些的题材,第一个问题就是ASP.NET
动态数据(Dynamic Data
)默认情形下,动态数据放在web应用的动态数据目录(DynamicData)里,该目录创造在根目录处。你的行使需要活动的不同的职务。
在Tailspin
Travel里面是“admin”目录,动态数据就在这多少个目录下,然后在Globa.asax.cs文件里

Dynamic
Data还有一个快速支付的底蕴是脚手架,脚手架是一种体制,通过脚手架,大家不用再为每一个表的扩大、查看、修改做不同的页面,因为脚手架会自动生成这多少个页面。Tailspin
Travel对富有表都启用脚手架,对负有表启用脚手架表示公开了上上下下数据模型:

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

可以看到,这六个Aciton是对应着DynamicData/PageTemplates文件夹中的六个页面文件。在这文件夹中还有一个ListDetails.aspx页面文件,是用以”合并页情势”,就是负有的操作都会在一页中完成。Tailspin
Travel并不曾启用那一个效用。DynamicData 文件夹的名号都是“DynamicData”。

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

routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute
对象有一个参数为
“Admin/{table}/{action}.aspx”,此外还为该目的指定了两个属性值
Constraints 和
Model。把一个连续自Route的DynamicDataRoute添加到Routing规则表中。

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

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

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

DynamicData/FieldTemplates
文件夹。包含各个类型的字段在查阅和成立、编辑时所显现的控件。

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

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

下边重点来阐明一下管制后台的DynamicData的构造,先可以阅读一下Scott
Guthrie
的文章
新的ASP.NET动态数据援助

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

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

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

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

前台采取ASP.NET MVC
2开发,相比简单,紧如果运用ViewModels,HtmlHelper,输出缓存,制止CSRF攻击,查询办法中采取PartialView,以及jQuery和ASP.NET
Ajax配合的有关内容,可以参考 Asp.net MVC2
使用经验,性能优化提出
学习。

变动新模板文件中的类名。

譬如说将类名称 List 改为 DynamicDataTest.FlightBookingsList。

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

DynamicData/PageTemplates 文件夹。包含在开展查看、编辑时的页面模板。

在网站或者应用程序模板中有六个Dynamic Data模板,一个是 “Dynamic
Data实体模板(Dynamic Data Entities )”它是利用ADO.net
Entity作为数据模型的,另一个是 “Dynamic Data 模板”,他是采取LINQ TO SQL
来作为数据模型。Tailspin Travel 是以Entity Framework作为数据模型的。

Dynamic Data也利用了Routing:

改变admin/Dynamicdata
下文件的情节的引用到新的路径((~/admin/Dynamicdata)
例如:
A、修改List.aspx和ListDetails.aspx 的注册指令的src属性。
B、修改 List.aspx 和母版页的img 的src属性。
C、任何自定义的必须拔取新路径的情节。

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

 

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

异常的,我们得以看看,下边使用的是 DynamicDataRoute 类,而不是 Route
类,DynamicDataRoute 继承于 Route,Table 和 Action 属性是
DynamicDataRoute 特有的。

相关文章