【问题标题】:Radio button group from enum来自枚举的单选按钮组
【发布时间】:2014-04-03 10:48:06
【问题描述】:

我正在尝试为枚举类型提供通用视图模型和编辑器模板,以将可能的值呈现到单选按钮组中。让我详细说明。

虚拟机看起来像这样

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 等。

【问题讨论】:

    标签: c# asp.net-mvc enums


    【解决方案1】:

    我会将枚举值作为字符串存储在您的视图模型中,并创建一个接受通用参数的函数来创建视图模型。

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2013-07-16
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多