我在“专业Sitecore开发”一书中读到 - 约翰·韦斯特说,最好的做法是在获取项目字段值时使用字段ID而不是字段名称。
但是像sc:text,sc:link,sc:image等的sitecore控件有一个名为field的属性,它使用字段名称。所以,我现在很困惑是将整个项目更改为Field ID,还是将其保留为字段名称以与sitecore使用一致。
任何建议都将受到赞赏。
答案 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而不是字段名称。
字段ID使用可以防止很多潜在的错误,拼写错误等。
如果您决定重命名某些字段(或其他开发人员决定重命名其字段),则无需担心正确的行为。
如果您使用模板的继承,则可能存在重复字段名称的潜在错误。
字段ID使用可防止不必要的处理。因为当您使用字段名称时,Sitecore会按字段名称解析字段ID,然后按ID检索字段。