私の最近のアプリケーションでは、次のようにしました。
CustomFields
このスキーマで呼び出されるデータベース テーブル:(CustomFieldId int PK, DisplayName nvarchar(50), Class int, Type int)
- 各拡張可能なエンティティには、 と呼ばれる新しい列が
CustomFieldValues
ありnvarchar(MAX)
ます。各エンティティには、Class
CustomFields に入る番号があります。CustomFieldValues
- そして、カスタム フィールドを表示するための ASP.NET MVC ビュー ハッカー。
基本的に、テーブルCustomFields
は各フィールド (フィールドの名前、データ型、関連付けられているエンティティのクラス) を定義し、各エンティティのCustomFieldValues
プロパティには実際のデータがリストされ、単純な値 (文字列、int) のみを含む CSV 文字列としてシリアル化されます。 、小数など、複雑なタイプやグラフはありません。
WebForms は、特に動的に追加されたフィールドを扱うのが実際には難しいため、フロントエンドには ASP.NET MVC を使用しました。モデルが確実に取得されるようにバインディングを変更する必要がありましたが、すべて問題ありません。
MVC を使用している場合は、次のようなカスタム ViewModel クラスが必要になります。
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";
}
シンプル!
ASP.NET MVC には、this のバインドに関するバグがあちこちにあることに注意してください。見つけて楽しんでください。