3
在我的c#.net MVC應用程序中,我想顯示Enum類型的複選框列表。EnBox類型的CheckBoxList MVC Razor
我有一個枚舉類型
[Flags]
public enum ModeType
{
Undefined = 0,
Read= 1,
Edit= 2
}
和我的模型是
Public TrainingModel
{
public int UserID {get;set;}
public ModeType Type {get;set}
}
在我看來,我需要兩個複選框,一個用於讀取,而另一個用於編輯 所以我試圖
@Html.CheckBoxFor(m => m.Type== ModeType.Read)
@Html.CheckBoxFor(m => m.Type== ModeType.Edit)
但是,這給了我錯誤 「模板只能用於fie ld訪問,屬性訪問,單維數組索引或單參數自定義索引器表達式。「
我工作圍繞這一問題,通過增加兩個屬性,我的模型
Public TrainingModel
{
public int UserID {get;set;}
public ModeType Type {get;set}
public bool IsRead
{
get{Type.HasFlag(ModeType.Read);}
set{Type |=ModeType.Read;}
}
public bool IsEdit
{
get{Type.HasFlag(ModeType.Edit);}
set{Type |=ModeType.Edit;}
}
}
,然後讓我看
@Html.CheckboxFor(m => m.IsRead)
@Html.CheckboxFor(m => m.IsEdit)
我知道,我已經接近它的方式是不正確的有應該是實現這一目標的更好方法。 有人請告訴我這個。
除了缺少ViewModel,我沒有看到更好的方法。 HTML本身不會處理只有2個選項的標誌複選框:你做了什麼(分開的複選框處理服務器端)並使用管理複選框(未映射)的javascript和隱藏輸入(映射)添加所選標誌值並設置該輸入。在2個選項中,你的清潔度更高。 JavaScript的唯一好處是減少POST數據。 – Pluc
@Pluc感謝您的回覆。但是那麼這意味着如果我要爲我的EnumType添加更多模式,那麼我將不得不添加屬性。 – ammu
是的。我想你也可以破解迭代枚舉中每個選項的東西並生成複選框,然後從表單結果中收集響應(不綁定到你的模型),將它們添加並將結果保存到模型中。它不會很乾淨,但它會隨着你的枚舉變化而擴展。但是,誠實地說,如果您計劃添加枚舉選項,您可能想要選擇它們顯示的順序(查看),以及何時觸摸視圖,在視圖模型中更改它並不是很困難 – Pluc