[英]How can I bind a radio button group to an enum property using an enum from another project?
[英]Radio button group from enum
我試圖針對枚舉類型提出一種通用的視圖模型和編輯器模板,以便將可能的值呈現到單選按鈕組中。 讓我詳細說明。
虛擬機看起來像這樣
public class OptionViewModel<TEnum> where TEnum : struct, IConvertible
{
public TEnum SelectedValue { get; set; }
}
然后,我可以通過編寫以下代碼為項目中的任何枚舉創建一個實例
public enum Numbers { One, Two, Three }
...
NumberOptions = new OptionViewModel<Numbers>();
...
然后通過渲染
@model OptionViewModel<TEnum>
@foreach (var value in Enum.GetValues(typeof(TEnum)).Cast<TEnum>())
{
var selected = value == Model.SelectedValue;
@Html.RadioButton(value.ToString(), value, selected)
}
不幸的是,模板甚至沒有編譯,因為當然沒有類型“ TEnum”。
有沒有更好的(可行的)方法來做到這一點? 我真的會達到這種抽象水平,因為枚舉中的單選按鈕組在我的項目中是很常見的情況,並且帶有附加屬性,例如IsVisible,IsEnabled等。
我將枚舉值作為字符串存儲在視圖模型中,並創建一個接受通用參數的函數來創建視圖模型。
public class OptionViewModel
{
public string SelectedValue { get; set; }
public List<string> Values { get; set; }
public static OptionViewModel Create<TEnum>() where TEnum : struct, IConvertible
{
var ovm = new OptionViewModel();
foreach (var value in Enum.GetValues(typeof(TEnum)).Cast<TEnum>())
{
ovm.Values.Add(value);
}
return ovm;
}
}
在控制器中:
NumberOptions = OptionViewModel.create<Numbers>();
在視圖中,如果我沒記錯的話,MVC表單將返回Model.SelectedValue中的值:
@model OptionViewModel
@foreach (var value in model.Values)
{
var selected = value == Model.SelectedValue;
@Html.RadioButton(Model.SelectedValue, value, selected)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.