在我最近的應用程序,我做到了,像這樣:
- 數據庫表稱爲
CustomFields
與此架構:(CustomFieldId int PK, DisplayName nvarchar(50), Class int, Type int)
- 每個擴展實體有一個新列名爲
CustomFieldValues
這是nvarchar(MAX)
。每個實體都有一個號碼位於CustomFields的Class
中。 CustomFieldValues
- 然後一些ASP.NET MVC view-hackery顯示自定義字段。
基本上,表CustomFields
定義每個字段(它的名稱,數據類型,和它與相關聯的類實體的),並且每個實體的CustomFieldValues
屬性列出了實際的數據,它被序列化爲一個CSV串只包含簡單的值:字符串,整數,小數等,沒有複雜類型或圖形。
我使用ASP.NET MVC作爲前端的東西,因爲WebForms實際上更難以使用,特別是動態添加字段。我必須對綁定進行一些更改,以確保我的模型被拾取,但一切都很好。
如果你使用MVC,你需要一個自定義的視圖模型類,看起來像這樣:
public class CustomFormViewModel {
public List<CustomFieldViewModel> CustomFields { get; set; }
}
public class CustomFieldViewModel {
public Int32 CustomFieldId { get; set; } // the field ID for definition lookup
public String Value { get; set; }
}
視圖
然後:
<% for(int i=0;i<Model.CustomFields.Count;i++) { %>
<%= Html.TextBoxFor(m => m[i].Value) %>
<% } %>
在你的行動,一切都應該是神奇開往你:
[HttpPost]
public ActionResult CustomForm(CustomFormViewModel model) {
model.CutomFields[0].Value == "foo";
}
Simples!
請注意,ASP.NET MVC確實有一些bug綁定這個,有樂趣找到它們!
來源
2013-03-18 22:50:00
Dai
非常感謝您的快速響應。在我們開始設計時,我會牢記這一點! – user2184255 2013-03-21 03:01:16