gpt4 book ai didi

c# - 来自枚举的单选按钮组

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:38 25 4
gpt4 key购买 nike

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

虚拟机看起来像这样

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

最佳答案

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

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

在 Controller 中:

NumberOptions = OptionViewModel.create<Numbers>();

在 View 中,如果我没记错的话,mvc 表单将返回 Model.SelectedValue 中的值:

@model OptionViewModel

@foreach (var value in model.Values)
{
var selected = value == Model.SelectedValue;

@Html.RadioButton(Model.SelectedValue, value, selected)
}

关于c# - 来自枚举的单选按钮组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com