请教一个枚举的问题

TT008 2018-01-12 02:33:51
请教一个枚举的问题
<select asp-for="A.B" class="form-control" asp-items="@Html.GetEnumSelectList<C>()">
新增进数据库里的怎么是枚举的ID而不是我需要的值呢
...全文
863 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
TT008 2018-01-15
  • 打赏
  • 举报
回复
断点这里明显就是A,但是一写进数据库就成了1了
圣殿骑士18 2018-01-15
  • 打赏
  • 举报
回复
你在 _context.Company.Add(Company); 之前先对company进行字段转换,比如我是用方法TransferWebModel()
/// <summary>
        /// 新增/修改单件信息
        /// </summary>
        /// <param name="model"></param>
        /// <param name="itemId"></param>
        public void AddOrUpdateItem(sam_ba_itemExtColumnsVm model, long? itemId)
        {
            //补上主键值+数据转换
            if (itemId != null) model.ItemId = itemId.Value;
            TransferWebModel(model);
/// <summary>
        /// 将Web端上传的web model转换为和数据库表结构类型相符的db model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        protected void TransferWebModel<T>(T model)
            where T : BaseModel
        {
            if (model == null) throw new ArgumentNullException("model");

            PropertyInfo[] props = model.GetType().GetProperties();
            foreach (PropertyInfo prop in props)
            {
                var value = prop.GetValue(model, null);
                if (value == null) continue;

                //各种常规转换
                if (value.ToString() == "true")
                {
                    //true转换
                    prop.SetValue(model, "1", null);
                }
                else if (value.ToString() == "false")
                {
                    //false转换
                    prop.SetValue(model, "0", null);
                }
                else if (value.ToString() == " ")
                {
                    //空字符串转换
                    prop.SetValue(model, null, null);
                }
            }
        }
你可以在TransferWebModel()中,将枚举值进行ToString()转换。
正怒月神 版主 2018-01-15
  • 打赏
  • 举报
回复
下面这个就是 int 转 enum的例子
static void Main(string[] args)
{
int v=1; //假设model传递过来1;
var q = ((ABC)v).ToString();
Console.WriteLine(q);

Console.ReadLine();
}

enum ABC
{
A=1,
B=2
}
TT008 2018-01-15
  • 打赏
  • 举报
回复
后台写进数据库代码 public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return Page(); } try { _context.Company.Add(Company); await _context.SaveChangesAsync(); } catch(Exception ex) { ex.ToString(); } return RedirectToPage("./Index"); } 字段属性是varchar
正怒月神 版主 2018-01-15
  • 打赏
  • 举报
回复
引用 8 楼 TT008 的回复:
public enum ABC { //[Display(Name = "请选取下列。。。")] A=1, B=2, C=3 } public ABC c_ABC{ get; set; } 我要写进数据库的是A,B,C而不是1,2,,3
首先,你数据库设置的字段是什么? 其次,如果你数据库字段没问题。 那么你要怎么保存,保存什么值,那可以从后台自己转。 后台也就是很简单的代码。 model m=new model; m.state=ABC.A.ToString();这样就存储了你的text而不是value了。 但是我不敢肯定,你既然使用了枚举值,却要存储一个 text值,而不是 value。那这个枚举值存在的意义是什么?
TT008 2018-01-15
  • 打赏
  • 举报
回复
public enum ABC { //[Display(Name = "请选取下列。。。")] A=1, B=2, C=3 } public ABC c_ABC{ get; set; } 我要写进数据库的是A,B,C而不是1,2,,3
threenewbee 2018-01-13
  • 打赏
  • 举报
回复
调用ToString再存入数据库
秋的红果实 2018-01-13
  • 打赏
  • 举报
回复
难道这样不行吗?

enum Number
{
    one=1,
    two=2,
    three=3
}

我是值=(int)Number.two;

TT008 2018-01-12
  • 打赏
  • 举报
回复
我想要显示值而不是ID要怎么做呢
全栈极简 2018-01-12
  • 打赏
  • 举报
回复
枚举只是C#代码中方便识别、书写的一种语法,保存到数据库中的应该是ID之类的。
正怒月神 版主 2018-01-12
  • 打赏
  • 举报
回复
select本来存放到后台的就是 value而不是text.
TT008 2018-01-12
  • 打赏
  • 举报
回复
传递的值是我需要的值,但是写到数据库就变成了ID
正怒月神 版主 2018-01-12
  • 打赏
  • 举报
回复
你调试一下,传递到后台是什么值呢。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧