CheckBoxList からの選択をカンマ区切りのリスト ( string
) として DB に保存しようとしています (1 つ以上の選択肢が選択されています)。として保存するためにプロキシを使用していstring
ます。そうしないと、リレーション用にDBに個別のテーブルを作成する必要があるためです。この単純なシナリオでは、作業に価値がなく、単にstring
そしてそれを避けてください。
CheckBoxList は、そのenum
選択肢に を使用します。
public enum Selection
{
Selection1,
Selection2,
Selection3
}
複雑ではありませんが[Display(Name="Choice 1")]
、拡張クラスを使用して、UI にわかりやすいものを表示します。string
の代わりにそれを保存できるかどうかはわかりませんが、確認ページのUIにわかりやすい文字列を「表示」することは大したことではないので、enum
保存すると思います。enum
string
これは、DB に保存する「レコード」クラスです。
public virtual string MyCheckBox { get; set; }
enum
これは「プロキシ」です。これは、私が見つけたサンプルですが、直接扱っていませIEnumerable<string>
んIEnumerable<Selection>
。
public IEnumerable<string> MyCheckBox
{
get
{
if (String.IsNullOrWhiteSpace(Record.MyCheckBox)) return new string[] { };
return Record
.MyCheckBox
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(r => r.Trim())
.Where(r => !String.IsNullOrEmpty(r));
}
set
{
Record.MyCheckBox = value == null ? null : String.Join(",", value);
}
}
DBに保存するために、作成クラスでこれを実行しようとしています:
proxy.MyCheckBox = record.MyCheckBox; //getting error here
しかし、エラーが発生しています:
'string' を System.Collections.Generic.IEnumerable' に暗黙的に変換することはできません
列挙値に APIを使用するParse
か、API から使用することが可能かどうかはわかりません。ToString
このようなことを行うと、入力したものはすべてDBに保存されることがわかっている("")
ので、エラーを克服する方法を見つけるだけです(または、代替手段がある場合):
proxy.MyCheckBox = new[] {"foo", "bar"};
私はこのようなことが苦手で、解決策を考え出すために掘り下げていました。どんな助けでも大歓迎です。