如何在Orchard CMS中存储以逗号分隔的列表?

时间:2012-12-29 15:05:53

标签: asp.net-mvc-3 orchardcms

使用Orchard CMS,我正在处理记录和部分代理,但无法弄清楚如何将其保存到数据库中。事实上,我承认我甚至不知道如何获得我想要保存到这个范例中的项目。我最初使用enum来做出选择:

MyEmum.cs

public enum Choices { Choice1, Choice2, Choice3, Choice4 }

MyRecord.cs

public virtual string MyProperty { get; set; }

MyPart.cs

public IEnumerable<string> MyProperty
{
    get
    {
        if (String.IsNullOrWhiteSpace(Record.MyProperty)) return new string[] { };
        return Record
            .MyProperty
            .Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(r => r.Trim())
            .Where(r => !String.IsNullOrEmpty(r));
    }
    set { Record.MyProperty = value == null ? null : String.Join(",", value); }
}

现在,在我的服务类中,我尝试了类似的东西:

public MyPart Create(MyPartRecord record)
{
    MyPart part = Services.ContentManager.Create<MyPart>("My");
    ...
    part.MyProperty = record.MyProperty; //getting error here
    ...
    return part;
}

但是,我收到以下错误:Cannot implicitly convert 'string' to System.Collections.Generic.IEnumerable<string>'

基本上,我试图将复选框(一个或多个选项)中的选项保存为数据库中以逗号分隔的列表。

这甚至不能解决我如何使用enum的问题。有什么想法吗?

对于某些背景:

我知道处理这种关系的适当方法是创建一个单独的表并使用IList<MyEnum>。但是,这是一个简单的列表,我不打算用编辑来操作(实际上,在这种情况下没有使用驱动程序,因为我在前端使用控制器和路由处理它)。我只是捕获数据并在管理视图中重新显示它以用于统计/历史目的。我甚至可以考虑摆脱该部分(考虑以下帖子:Bertrand's Blog Post

1 个答案:

答案 0 :(得分:0)

应该是:

part.MyProperty = new[] {"foo", "bar"};
例如,

。部件的setter将把值作为逗号分隔的字符串存储在记录的属性上,该字符串将保存到数据库中。

如果要使用枚举值,则应使用.NET在Enum上提供的ParseToString API。