以前の開発者(私たちともう働いていないので、私は彼に尋ねることができません)はかなり滑らかで、私は本当に理解していません。データベースでどの列挙型が選択されているのですか?
[Flags]
public enum SidingTypePreference
{
[Value(Name = "Vinyl")]
Vinyl = 1,
[Value(Name = "Metal or Aluminum")]
MetalOrAluminum = 2,
[Value(Name = "Composite")]
Composite = 4,
[Value(Name = "Wood")]
Wood = 8,
[Value(Name = "Other")]
Other = 16
}
、SidingTypes
が選択されたすべての値の合計である単一のintとして格納されます。私たちは、この列挙を持っています。
Model.SidingTypes = table.SidingTypes
とビューで:
table
は、クエリからわずか行結果である制御装置において
public SidingTypePreference? SidingTypes { get; set; }
:モデルで
@Html.EditorFor(m => Model.SidingTypes, new { @class = "form-control input-sm", GroupID = "SidingTypePreference", Cols = 1 })
しかし、私が理解していない部分があります。 SidingTypes = 10
としましょう
<input type="checkbox" class="..." name="SidingTypes_0" value="1"> Vinyl
<input type="checkbox" class="..." name="SidingTypes_1" value="2" checked> Metal or Aluminum
<input type="checkbox" class="..." name="SidingTypes_2" value="4"> Composite
<input type="checkbox" class="..." name="SidingTypes_3" value="8" checked> Wood
<input type="checkbox" class="..." name="SidingTypes_4" value="16"> Other
(「ルックアップチェックボックス - SidingTypes」クラスだけでスクロールする必要性を防ぐために編集さが、彼らはすべてです。)
:ブードゥー教の魔法のいくつかの並べ替えすることにより、そのint型をに翻訳されそのintの値から、チェックされたものとされなかったものが分かります。
最初の質問:このネイティブ.NETですか?または、私が見つける必要のある拡張メソッドやテンプレートがありますか?
第2質問:私は何かと独立して、列挙型が選択されているかどうかを判断するメソッドを作成します。
ような何か:私は(今数年前)にチェック
private bool IsSelected(int SidingTypes, SidingTypePreference sidingTypePreference)
{
... ?? ...
return true or false;
}
'Flags'属性を持つenumは、合成値を構成する等価ビットに値を分解します(例:' 10 = 2 + 8')。プロジェクトにカスタムテンプレートがあると思われます。列挙型の値をチェックボックスのセットに追加します。 –
これをチェックしてください:https://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110).aspxまた、このポストは非常に良い答えがあります:http://stackoverflow.com/質問/ 8447/what-does-the-flags-enum-attribute-in-c – Magnetron
[この回答を参照してください(http://stackoverflow.com/questions/37990786/how-to-reduce-code-duplication- in-asp-net-mvc-view-when-working-with-flags-enum/37991402#37991402) '[Flags]'属性を持つenumでの作業のため –