0

以下のシナリオを実装するためのテクニック/戦略についてご支援いただければ幸いです
。 1. SQL データベースには、いくつかのフィールドを持つ Customer テーブルがあります。2. ユーザーは、追加のカスタム フィールドを追加して、データ型を指定し、値が必要などのいくつかのルールを指定できます。 3. ユーザーがユーザー インターフェイスをロードすると、これらのカスタム フィールドは、分野。4. ユーザーが変更を保存するとき、これらのカスタム フィールドの値をデータベースに保存する必要があります。

テクノロジー
私たちはまだ設計段階にあるので、あらゆる提案をお待ちしています。ただし、スキルセットは主に SQL、ASP.Net Web フォームにあります

質問
1. 上記の項目 2 (TableName、FieldName、DataType、Rules などを格納する別のテーブル) を達成するための最良の方法は何ですか? フィードバックをいただければ幸いです。
2. 上記の項目 3 と 4 を達成するための最良の方法は何ですか - 動的データ、データ注釈などについて調べています。すべて有望に見えますが、問題を解決するためにこれらをどの程度利用できるかについては確信が持てません。 .

繰り返しになりますが、優れたデザインを考え出すための支援に感謝します。

4

1 に答える 1

0

私の最近のアプリケーションでは、次のようにしました。

  1. CustomFieldsこのスキーマで呼び出されるデータベース テーブル:(CustomFieldId int PK, DisplayName nvarchar(50), Class int, Type int)
  2. 各拡張可能なエンティティには、 と呼ばれる新しい列がCustomFieldValuesありnvarchar(MAX)ます。各エンティティには、ClassCustomFields に入る番号があります。CustomFieldValues
  3. そして、カスタム フィールドを表示するための 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 のバインドに関するバグがあちこちにあることに注意してください。見つけて楽しんでください。

于 2013-03-18T22:50:00.210 に答える