惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
T
The Blog of Author Tim Ferriss
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
D
Docker
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
雷峰网
雷峰网
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
美团技术团队
C
Cisco Blogs
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
C
CERT Recently Published Vulnerability Notes
S
Secure Thoughts
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
The Register - Security
The Register - Security
T
Tenable Blog
J
Java Code Geeks
The Cloudflare Blog
有赞技术团队
有赞技术团队
博客园 - 聂微东
P
Palo Alto Networks Blog
Security Latest
Security Latest
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
SegmentFault 最新的问题
H
Hacker News: Front Page
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
S
Security @ Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Hacker News: Ask HN
Hacker News: Ask HN

博客园 - 双鱼座

永中科技倒闭的另一面 ASP.NET MVC + ADO.NET EF 项目实战(三):引入jQuery 虎年刚开头,给大家拜个年... 每一个社区成员,用你的努力为微软平台的开发技术添上一把柴! POCO真那么重要么? 也说 ASP.NET MVC的 Script 管理 IT风云录(开篇词):我们从David Cutler学到什么? ASP.NET MVC + ADO.NET EF 项目实战(二):设计过程与设计工具 体验ADO.NET Entity Framework的继承 MSDN,微软怎么会这样啊? ASP.NET MVC + ADO.NET EF 项目实战(一):应用程序布局设计 用asp.net mvc写一个后台文件上传 ORM漫谈 对Delphi 7/Delphi 2007的Windows服务类库的一个小改进 案例分析:面向对象得失论 闲话时间调度算法 2007体检结果出来了 在ASP.NET应用程序中捕捉身份验证状态的变化 以非泛型方式调用泛型方法
ASP.NET MVC的RAD之路(一)
双鱼座 · 2009-12-10 · via 博客园 - 双鱼座

嗨。或许我有极重的RAD情结,当我第一次弄明白ASP.NET MVC架构之后,我忽然发现,RAD有了希望。大多数情况下,当你的Model不幸被修改了,不得不去修改View。而从Model到View的映射还不得不让人来处理,也就是设计时的处理。Visual studio 2008在我们第一次创建View的时候可以帮一点小忙,而修改根本就无能为力了。其实我的期望比较的现实,大概就是ObjectGrid的ASP.NET MVC版。

例如你的Model可以写成这样:

代码

[ObjectForm(ViewStyle.Table)]
public sealed class Product
{
  [Hidden]
  
public int Id { getset; }

  [TextBox(Caption 

= "商品名称", Width = 120)]
  
public string Name { getset; }

  [DropdownList(Caption 

= "类别", ListCreator = typeof(CategoryLister))]
  
public ProductCategory Category { getset; }

  [TextBox(Caption 

= "产地", Width = 120)]
  
public string ProducingArea { getset; }

  [RadioBox(Caption 

= "单位", ListCreator = typeof(UnitLister))]
  
public string Unit { getset; }

  [EditableGrid(Caption 

= "存货量", AllowAdd = true)]
  
public IEnumerable(Stock) Stocks{ getset; }
}

[ObjectForm(ViewStyle.InRow)]

public sealed class Stock
{
  [Hidden]
  
public Product Product { getset; }

  [TextBox(Caption 

= "产品规格", Width = 120)]
  
public string Spec { getset; }

  [TextBox(Caption 

= "数量", Width = 120)]
  
public int Quanlity { getset; }

  [TextBox(Caption 

= "单价", Mask = "0.##")]
  
public double Price { getset; }

  [DatePicker(Caption 

= "入库日期")]
  
public Date Warehousing { getset; }
}

然后在一个View中可以这样使用:

<div name="content">
  
<% Html.EditorForm(Model); %>
</div>

这时候,如果Model变了,就不用担心View了。就让Model随便去变吧!

实现这个梦想,有两个方案。第一个方案是动态View引擎。先替换掉View的查找过程,当某个ViewName对应的View不存在时,如果有相应的定义,就立即生成一个动态的View交给ViewEngine。如果可能,这个ViewEngine应该替换成能处理动态View的。这个途径纯粹是在ASP.NET MVC内部解决,但限于目前MVC本身的能力,存在一定的难度。你知道的,目前编辑页面的Get和Post是占用两个Action的,动态化以后,第二个Action被动态化了。动态化这个Action本身并不复杂,但为了处理各种复杂Model,所以工作量比较大。此外,由于编辑Form是动态生成的,与页面容器的样式协调性也比较难以处理。

第二个途径是使用ExtJS。ExtJS最大的长处就是处理动态的东西,因为一切的一切都是在页面上搞定的。服务端只负责组装,真正的运行却是在客户端。最关键的是:在解决皮肤这样的全局问题的时候,这个方案就非常便利了。但是,显然这个方案的工作量比方案一会更大。

好吧,收集一下现有的资源, 选择其中一个方法来实现。

1.已经有一整套ExtJS的扩展可以在ASP.NET MVC下直接使用。

2.已经有一个比DefaultModelBinder功能更强大的IModelBinder,可以处理更复杂的Model。