我有一个具有3个属性的模型,正如我在上一个问题中提到的(当然这是一个不同的问题),模型名为“Something”,它有3个属性:
int SomethingID
string Name
List<System.Drawing.Color>
(当然这不是原始代码,想通过节省一些长度来节省一些读者)
我的初始化程序就是这样:
protected override void Seed(DatabaseContext context)
{
var somethings = new List<Something>
{
new Something
{
Name="blah blah", Colors= { Color.Black, Color.Red }
}
};
somethings.ForEach(s => context.Somethings.Add(s));
context.SaveChanges();
base.Seed(context);
}
当我尝试在视图中获取这些颜色时,颜色为空。
如果我在构造somethings
之后立即在初始化程序中设置断点,我得到一个名为Colors
的属性,其数量为2(所以没关系,我的对象带有我的ID,名称和颜色)。
但是当它在视图中时,调试器会显示Colors
的计数为0,正如您所猜测的那样 - 列表为空。
Colors:
@foreach (var itemColor in item.Colors)
{
itemColor.ToString();
}
期望的结果:
Colors: Black Red
目前的结果:
Colors:
(空)
答案 0 :(得分:1)
您只是列出了代码块中的颜色,但没有将它们写入屏幕。尝试
Colors:
@foreach (var itemColor in item.Colors)
{
@(itemColor.ToString())
}
我最喜欢的地方是快速参考剃刀语法 http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
修改强>
更改您的对象以包含此字符串属性,该属性将命名颜色与数据库之间的颜色列表属性进行转换。这样,您的对象就可以完全控制将信息转换为属性,您可以继续正常使用它们。
public string SavedColors
{
get { return Colors.Aggregate("", (current, color) => current + (color.Name + ",")).TrimEnd(','); }
set
{
Colors = value.Split(',').Select(Color.FromName).ToList();
}
}
[NotMapped]
public List<System.Drawing.Color> Colors { get; set; }