Sitecore字段ID与字段名称相对应

时间:2014-04-02 16:37:23

标签: c# sitecore sitecore6 sitecore-dms

我在“专业Sitecore开发”一书中读到 - 约翰·韦斯特说,最好的做法是在获取项目字段值时使用字段ID而不是字段名称。

但是像sc:text,sc:link,sc:image等的sitecore控件有一个名为field的属性,它使用字段名称。所以,我现在很困惑是将整个项目更改为Field ID,还是将其保留为字段名称以与sitecore使用一致。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:5)

是的,Sitecore允许您使用名称和ID。此外,Sitecore允许您在同一模板中具有相同的字段名称,这可能会导致一些混淆。当然,ID不能重复。

我认为使用ID代替名称更可靠。可以在Sitecore上轻松更改名称,并且在发生这种情况时很难找到错误。在没有人注意到字段值不存在之前,您不会收到编译错误或类似错误。

一种好的方法是使用代码生成器(如T4或TDS)来创建要在代码中使用的强类型类。类似的东西:

public static struct MyTemplate
{
    public static struct MyGroup1
    {
        public static readonly ID Foo = new ID("{1111111-1111-1231-1231-12312323132}");
    }
    public static struct MyGroup2
    {
        public static readonly ID Foo = new ID("{9999999-9999-xxxx-1231-12312323132}");
    }
}

然后你按照控制方式进行操作:

@Html.Sitecore().Field(MyTemplate.MyGroup.Foo); //where foo returns the id.

希望有所帮助..

答案 1 :(得分:3)

作为一个FYI添加到@ RobertoBr的优秀答案,Sitecore在内部使用GUID来访问众所周知的字段。如果您反编译Sitecore.Kernel.dll并查看静态类Sitecore.FieldIDs,您将看到一个您将非常熟悉的字段列表,例如。

public static ID Created = new ID("{25BED78C-4957-4165-998A-CA1B52F67497}");
public static ID CreatedBy = new ID("{5DD74568-4D4B-44C1-B513-0AF5F4CDA34F}");
public static ID DisplayName = new ID("{B5E02AD9-D56F-4C41-A065-A133DB87BDEB}");

与RobertoBr的建议非常相似。

答案 2 :(得分:2)

我建议您在所有情况下都使用字段ID而不是字段名称。

  1. 字段ID使用可以防止很多潜在的错误,拼写错误等。

  2. 如果您决定重命名某些字段(或其他开发人员决定重命名其字段),则无需担心正确的行为。

  3. 如果您使用模板的继承,则可能存在重复字段名称的潜在错误。

  4. 字段ID使用可防止不必要的处理。因为当您使用字段名称时,Sitecore会按字段名称解析字段ID,然后按ID检索字段。