|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。<p>在这里我们将从一个实例为人人剖析ASP.NETMVC2中的TailspinTravelUI层,51CTO也向您保举专访微软MVP衣明志:走进ASP.NETMVC2框架开辟。以便于人人更好的了解ASP.NETMVC。
TailspinTravel是一个旅游预订的使用程序示例,最新版本接纳ASP.NETMVC2手艺构建,次要利用DataAnnotations考证,客户端考证和ViewModels,还展现了很多VisualStudio2010,.NETFramework4,和WindowsServerAppFabric的手艺,参看ASP.NETMVC2示例TailspinTravel。
TailspinTravel计划的手艺对照多,明天我们来看看界面(UI)上的手艺,在UI层下去说次要接纳的手艺是ASP.NETMVC2和ASP.NETDynamicData框架。从功效下去分为向一般用户供应的前台页面和办理员利用的背景界面,前台页面次要完成的是旅游举动日程布置,航班,旅店,租车这几部分接纳的ASP.NETMVC2手艺,办理员用的背景办理页面利用的是ASP.NETDynamicData开辟的,这两种手艺在网站里的使用有树模感化,关于办理员利用的背景的会见量不成能很年夜,网站的次要流量是一般用户利用的前台页面,组合利用这两个框架,能够加速网站的开辟。
组合这两种手艺,就会碰着一些的成绩,第一个成绩就是ASP.NET静态数据(DynamicData)默许情形下,静态数据放在web使用的静态数据目次(DynamicData)里,该目次创立在根目次处。你的使用必要挪动的分歧的地位。在TailspinTravel内里是“admin”目次,静态数据就在这个目次下,然后在Globa.asax.cs文件里
<olclass="dp-c">varmetaModel=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.NET4.0有个新特征叫做“主动启动使用程序”,主动启动,先行初始化web使用,而不用守候内部客户端会见web服务器时才启动的才能。这能够有助于你给第一个会见者供应一个更快的复兴体验,制止撰写定制剧本来“预热(warmup)”服务器和筹办好任何数据缓存。它可用于任何范例的ASP.NET使用,包含基于ASP.NETWebForms和ASP.NETMVC的使用。不外请求在IIS7.5(随Windows7和WindowsServer2008R2公布)上运转ASP.NET4时利用。这个主动启动特征供应了一个可把持的体例来启动一个使用事情历程,初始化ASP.NET使用,然后承受HTTP哀求。详细参看ScottGuthrie的文章VS2010和.NET4.0系列之《主动启动ASP.NET使用》篇,TailspinTravel有个类Microsoft.Samples.Tailspin.Web.Infrastructure.ApplicationPreloader,就是用这个特征事后加载使用程序的缓存。
上面我们来详细剖析前台和办理背景:
前台接纳ASP.NETMVC2开辟,对照复杂,次要是利用ViewModels,HtmlHelper,输入缓存,制止CSRF打击,查询办法中利用PartialView,和jQuery和ASP.NETAjax共同的相干内容,能够参考Asp.netMVC2利用履历,功能优化倡议进修。
上面重点来讲明一下办理背景的DynamicData的布局,先能够浏览一下ScottGuthrie的文章新的ASP.NET静态数据撑持:
ASP.NET静态数据在举行创立和更新数据时还会对所录进的数据举行考证,这类考证既产生在客户端也产生在服务器端。
必填字段考证。假如字段不同意为NULL,则录进时必需录进数据。不外这里另有待改善,不同意为NULL,也就成了不同意零长度字符串,而实践使用中NULL和零长度字符串是两回事。即使不敷完善,也已为我们加重很多事情量了。
长度考证。假如字段范例为nvarchar(10),那末就不同意凌驾10个字符;假如字段范例不是nvarchar(10),而是varchar(10),此时六个汉字也会经由过程考证,只是没法进库而已,会前往毛病。
范例考证。好比字段是日期范例,则只同意录进日期。
ASP.NET静态数据具有主动格局功效:好比bit范例的字段显现为一个多选框,而标识字段不会在拔出数据时显现出来。
ASP.NET静态数据还具有主动辨认表联系关系的功效:好比产物表与产物种别表举行了联系关系,那末我们在录进产物数据的时分,ASP.NET静态数据会主动以下拉列表的情势显现产物种别。此功效十分不错。
在网站大概使用程序模板中有两个DynamicData模板,一个是"DynamicData实体模板(DynamicDataEntities)"它是利用ADO.netEntity作为数据模子的,另外一个是"DynamicData模板",他是利用LINQTOSQL来作为数据模子。TailspinTravel是以EntityFramework作为数据模子的。
DynamicData也利用了Routing:
<olclass="dp-c">routes.Add(newDynamicDataRoute("Admin/{table}/{action}"){Constraints=newRouteValueDictionary(new{action="List|Edit|Details|Insert"}),Model=metaModel});
routes.Add的参数为一个DynamicDataRoute工具,而该DynamicDataRoute工具有一个参数为"Admin/{table}/{action}.aspx",别的还为该工具指定了两个属性值Constraints和Model。把一个承继自Route的DynamicDataRoute增加到Routing划定规矩表中。
Constraints=newRouteValueDictionary(new{action="List|Details|Edit|Insert"})这句暗示束缚,这里暗示action只能是List、Details、Edit、Insert中的一个。
能够看出,这四个Aciton是对应着DynamicData/PageTemplates文件夹中的四个页面文件。在那文件夹中另有一个ListDetails.aspx页面文件,是用于"兼并页形式",就是一切的操纵城市在一页中完成。TailspinTravel并没有启用这个功效。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文件夹。包括在举行检察、编纂时的页面模板。
DynamicData另有一个疾速开辟的基本是脚手架,脚手架是一种机制,经由过程脚手架,我们不用再为每个表的增添、检察、修正做分歧的页面,由于脚手架会主动天生这些页面。TailspinTravel对一切表都启用脚手架,对一切表启用脚手架暗示公然了全部数据模子:
metaModel.RegisterContext(contextFactory,newContextConfiguration{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只能用于类、办法、属性、索引、事务
<divclass="code"><olclass="dp-c">[MetadataType(typeof(CarRentalMetadata))]&nbs中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。 |
|