c# - 将枚举绑定(bind)到 LINQ 和 SelectListItem

标签 c# asp.net-mvc linq forms

我正在尝试绑定(bind)以下枚举

public enum CertificateTypes : byte
{
    None = 0,
    Original = 1,
    AuthenticatedCopy = 2,
    Numbered = 3
}

tinyint列在数据库中。但是,当创建 SelectListItems 并调用时,例如 Person.CertificateTypes.Original.ToString() I get this:

<pre><code><option value="Original">Original</option> </code></pre>

which is not bindable to a byte? column. How should I do this? Should I explicitly set the value to "1" on the <code>Value</code> property of the SelectListItem ?或者有没有办法让这项工作“自动”?

最佳答案

如果你想自动使用,你可以使用

var enumValues = Enum.GetValues(typeof(CertificateTypes)).Cast<CertificateTypes>().Select(e => (byte)e);
var selectList = new SelectList(enumValues);

这里的问题是您只会获取字节,因此您可能需要选择一种新类型,例如...

var enumValues = Enum.GetValues(typeof(CertificateTypes)).Cast<CertificateTypes>()
                                                         .Select(e => new KeyValuePair<byte, string>((byte)e, e.ToString()));
var selectList = new SelectList(enumValues, "Key", "Value");

这只会从枚举中获取可能的值并将其转换为 CertificateTypes 的 IEnumerable,然后获取每个值并将其转换为新的 KeyValuePair。

需要注意的一点是,只有在枚举上具有 [Flags] 属性时,才使枚举复数化通常是个好主意。否则我会将其命名为单数。

必须爱上 LINQ!

关于c# - 将枚举绑定(bind)到 LINQ 和 SelectListItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553597/

相关文章:

asp.net-mvc - 清除 IISExpress 缓存

C# JSON.Net 使用 LINQ 解析并获取与某个值匹配的所有元素的列表

c# - 如何在 ASP.NET MVC View 中传递多个模型?

c# - Linq查询帮助

c# - 从 PowerShell WebJob 读取 Azure WebApp ApplicationSetting

c# - 如果在列表框中选择索引,则将列表框与数据库链接并在文本框中显示值。 C#

c# - 您将如何处理这个简单的字符串解析问题?

c# - 来自 Google 的 Oauth2 响应给出了 DotNetOpenAuth 400 错误请求

c# - “authority”应为 Uri 格式参数名称 : authority

asp.net-mvc - 具有多个 MVC 区域的表单例份验证