打造可持续发展的事业

事业像系统的框架,要稳定、可扩展,同样需要精心设计的!

再开一扇Dynamic Data的门,扩展DataAnnotations属性

背景

昨天,我提供了一个例子来完成FieldTemplate的扩展,《如何在Dynamic Data Framework下实现Lookup字段下拉列表》,使得我们能够随心所欲来在不同的模式(ListEditDetailInsert等)下显示一个类型的字段。其中一个关键的属性(Attribute)叫做UIHint,通过它来引向我们自定义的Template并能够传递一些辅助的参数。无疑,利用Metadata,我们能够方便定义Dynamic Data的显示效果,利用System.ComponentModel.DataAnnotations中提供的属性能够完成大部分的定制工作,如DisplayFormatScaffoldColumn等等,该类库提供了以下属性:


但是,程序的要求永远是多变的,是无法满足的。比如我们需要将一个数据库的某些字段不显示在列表中,而显示在编辑和详细的
UI中,我们利用提供的Scaffold没法完成这个效果。Scaffold只能控制所有页面。

解决方案

我们先扩展一个属性类SamDisplayModeAttribute


Code

这样我们就可以在Metadata中来定义该属性:

Code

这一行

[SamDisplayMode(SamDisplayMode.SDM_DETAIL|SamDisplayMode.SDM_EDIT)]

表明该字段将出现在Detail页面和Edit页面,而不会出现在List中。效果如下:

   


这样我们就能集中在
Metadata中来定义,而不是为每个对象(Table)定义很多CustomPages

 

我们现在就是要能够识别SamDisplayMode并能够作用在不同模式(Mode)的Page中即可。为此我们修改每一个Page Template



下面以
Edit.aspx页面为例,来更改。
Edit.aspx.cs


Code





这样,能够按照我们定制,在相应的页面显示适当的字段。更重要的是,我们打开了一扇大门,能够让我们体验更多自由控制的快感!

posted on   PM2004  阅读(2240)  评论(5编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
< 2009年10月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

导航

统计

点击右上角即可分享
微信分享提示