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"};
私はこのようなことが苦手で、解決策を考え出すために掘り下げていました。どんな助けでも大歓迎です。