如何将枚举数据类型从int转换为string?
这是我的下面的代码
public class Users_Accounts
{
[Key]
public int AccountID { get; set; }
public Guid UniqueID { get; set; }
[EnumDataType(typeof(string), ErrorMessage = "{0} Opps")]
public Title Title { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
}
这是我的Title
枚举:
public enum Title
{
Mr, Mrs, Miss, Chief
}
我收到错误
InvalidCastException:无法将类型为“ System.String”的对象转换为类型为“ System.Int32”。
我知道枚举是强类型并且具有int值,并且在我的数据库中它的nvarchar(20)
如何转换?
非常感谢
答案 0 :(得分:1)
我将为您提供一个示例,您可以尝试,但是这只是一个快速的解决方案,因为您没有设计数据库结构。
枚举项:
public enum Title
{
Mr,
Mrs,
Miss,
Chief
}
默认情况下,Title.Mr
的默认值应为0
,Mrs
的默认值应为1
...,与其他版本相同。
如果枚举中包含256个或更少的项,则可以尝试:
public enum Title : byte
{
Mr = 0,
Mrs = 1,
Miss = 2,
Chief = 3
}
Title.Mr
仍具有值0
。
实体:
public class Users_Accounts
{
[Key]
public int AccountID { get; set; }
public Guid UniqueID { get; set; }
//You can change the returned type of `Title` property from `Title` to `string` here
public string Title { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
}
模型:
public class AddUserViewModel
{
public Title Title { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
}
更新到数据库时,需要将枚举转换为字符串:
public IActionResult AddUser(AddUserViewModel model)
{
// title contains value like: 0, 1, 2... as string
string title = ((int)model.Title).ToString();
var user = new Users_Accounts
{
AccountID = ...
UniqueID = ...
Title = title,
First_Name = model.First_Name,
Last_Name = model.Last_Name
};
_dbContext.UserAccounts.Add(user);
_dbContext.SaveChanges();
}
获得一些用户后,可以将Title
作为字符串转换为枚举:
var user = _dbContext.UserAccounts.SingleOrDefault(x => x.AccountID == 1);
Title userTitle = (Title)Convert.ToInt32(user.Title);
userTitle
将返回Title.Mr
或Title.Mrs
...
注意::如果您决定使用
public enum Title : byte {}
您需要将Convert.ToInt32
更改为Convert.ToByte
。
答案 1 :(得分:0)
我也在网上找到了它,虽然它的MVC 5将View.Bag更改为View [“ Data”],但它仍然有效