ASP.NET MVC的RAD之路(一)

嗨。或許我有極重的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 { get; set; }
  [TextBox(Caption = "商品名稱", Width = 120)]
  public string Name { get; set; }
  [DropdownList(Caption = "類別", ListCreator = typeof(CategoryLister))]
  public ProductCategory Category { get; set; }
  [TextBox(Caption = "產地", Width = 120)]
  public string ProducingArea { get; set; }
  [RadioBox(Caption = "單位", ListCreator = typeof(UnitLister))]
  public string Unit { get; set; }
  [EditableGrid(Caption = "存貨量", AllowAdd = true)]
  public IEnumerable(Stock) Stocks{ get; set; }
}
[ObjectForm(ViewStyle.InRow)]
public sealed class Stock
{
  [Hidden]
  public Product Product { get; set; }
  [TextBox(Caption = "產品規格", Width = 120)]
  public string Spec { get; set; }
  [TextBox(Caption = "數量", Width = 120)]
  public int Quanlity { get; set; }
  [TextBox(Caption = "單價", Mask = "0.##")]
  public double Price { get; set; }
  [DatePicker(Caption = "入庫日期")]
  public Date Warehousing { get; set; }
}
然後在一個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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章