我正在尝试绑定(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/