探索ASP.NET中Tailspin TravelUI层奥秘二
下面我们来具体分析前台和管理后台:
前台采用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(newDynamicDataRoute("Admin//") { Constraints =newRouteValueDictionary(new{ action ="List|Edit|Details|Insert"}), Model =metaModel });
routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute 对象有一个参数为 "Admin//.aspx",另外还为该对象指定了两个属性值 Constraints 和 Model。把一个继承自Route的DynamicDataRoute添加到Routing规则表中。
Constraints =newRouteValueDictionary(new{ action ="List|Details|Edit|Insert"})
这句表示约束,这里表示 action 只能是 List、Details、Edit、Insert 中的一个。
可以看出,这四个Aciton是对应着DynamicData/PageTemplates文件夹中的四个页面文件。在那文件夹中还有一个 ListDetails.aspx页面文件,是用于"合并页模式",就是所有的操作都会在一页中完成。Tailspin Travel并没有启用这个功能。DynamicData 文件夹的名称都是“DynamicData”。
上面的 、 可不可以改成我们自己想要的名字呢?
不行的,我们可以看到,上面使用的是 DynamicDataRoute 类,而不是 Route 类,DynamicDataRoute 继承于 Route,Table 和 Action 属性是 DynamicDataRoute 特有的。
DynamicData/Content/GridViewPager.ascx 分页控件。
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日