2011-10-29 37 views
1

我有3个属性的模型,正如我在前面提到的问题(当然这是一个不同的问题),该模型被称为“东西”,它有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

我在下面的答案中添加了一个翻译属性,它将无缝地将一串命名的颜色转换为数据库中的系统颜色列表。您只需维护当前的系统颜色列表,字符串属性将自动翻译它,从而维护关系数据库中的状态。 – benjamin

回答

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; } 
+0

这会给我写@代码里面的错误。注意护腕。除此之外,视图不是问题,因为debuger显示'Colors'属性是空的。 – MasterMastic

+0

以及您发布的代码,它看起来像您播种与颜色的数据库。数据库中的值是什么?如果他们是您在控制器中使用的代码推到视图中的代码?控制器决定了视图中显示的内容,而不是模型构建器。 – benjamin

+0

如何检查它是否在数据库中?在Visual Studio中它没有颜色,但我认为这很正常。(我的控制器是从VS的模板构建的,甚至没有碰它) – MasterMastic