无法获取要查看的属性

时间:2011-10-29 04:49:32

标签: asp.net-mvc-3

我有一个具有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: (空)

1 个答案:

答案 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; }