0

我在使用 Umbraco 6.1.5 和 uSiteBuilder 3.0.0 时遇到了一个问题,当我使用ContentHelperDocumentType 中定义的所有字段实例化一个强类型的 DocumentType 时,它​​们都被加载到对象中,但是像NameId或者Children没有加载(它们'重新为空、空或 0)。

据我所知,这是因为ContentHelper负责实例化的方法正在调用空构造函数DynamicNode。有什么我想念的吗?我应该在我的文档类型上定义构造函数吗?

这是我的文档类型:

namespace USiteBuilderTest.DocumentTypes
{
    [DocumentType]
    public class Home : DocumentTypeBase
    {
        [DocumentTypeProperty(Name = "Field 1")]
        public string Field1 { set; get; }

        [DocumentTypeProperty(Name = "Field 2")]
        public string Field2 { set; get; }

        [DocumentTypeProperty(Name = "Field 3")]
        public string Field3 { set; get; }
    }
}

以防万一,这是调用空构造函数的代码部分:

Type typeDocType = DocumentTypeManager.GetDocumentTypeType(node.NodeTypeAlias);
    if (typeDocType != null)
    {
        ConstructorInfo constructorInfo = typeDocType.GetConstructor(new[] { typeof(int) });
        if (constructorInfo == null)
        {
            retVal = (DocumentTypeBase)Activator.CreateInstance(typeDocType);
        }
        else
        {
            retVal = (DocumentTypeBase)constructorInfo.Invoke(new object[] { node.Id });
        }
4

2 回答 2

0

我也遇到过这个问题。一种解决方案可能是添加一个空构造函数和一个以 nodeid 作为输入的构造函数。像这样:

namespace USiteBuilderTest.DocumentTypes
{
    [DocumentType]
    public class Home : DocumentTypeBase
    {
        public Home() {}

        public Home(int nodeId) : base(nodeId) { }

        [DocumentTypeProperty(Name = "Field 1")]
        public string Field1 { set; get; }

        [DocumentTypeProperty(Name = "Field 2")]
        public string Field2 { set; get; }

        [DocumentTypeProperty(Name = "Field 3")]
        public string Field3 { set; get; }
    }
}

这对我有用。

于 2015-01-05T15:31:39.697 回答
0

尽管 Codeplex 项目描述明确指出分支“3.0.0”应该与 Umbraco v6 一起使用,但实际上应该使用一个特定的 v6 分支(标记为“version6API”)。

答案归功于 Vladan Ostojic,他在 Umbraco 论坛上回答了这个问题:

http://our.umbraco.org/projects/developer-tools/usitebuilder/usitebuilder-support/44774-uSiteBuilder-30-loads-DocumentType-fields-but-not-the-DynamicNode-fields?p=0#comment161011

于 2013-09-16T08:45:58.417 回答