从Tridion中的XML检索类别时出错(DD4T - MVC)

时间:2012-06-19 13:24:28

标签: tridion dd4t

在DD4T视图中,我试图在类别中选择关键字的Path值。

foreach(var category in @Model.Categories)
{
    if (category.Title.Contains("Taxonomy"))
    {
        str = category.Keywords[0].Path;            

        break;
    }
}

但在@ Model.Categories中获取null。

  

错误:对象引用未设置为对象的实例。

虽然数据存在于XML中。

请建议。

5 个答案:

答案 0 :(得分:7)

我发现这是DD4T中的一个问题。解决方法非常简单:如果使用Component(或Page)的实现作为模型,而不是接口,则可以使用。

所以开始你的观点:

@model DD4T.ContentModel.Component

而不是

@model DD4T.ContentModel.IComponent

再试一次。

答案 1 :(得分:4)

我已将此记录为DD4T Google Code网站here中的问题。

这似乎是由List和IList不支持的逆转引起的,这意味着这样的行:

IList<ICategory> IComponent.Categories
{
    get { return Categories as IList<ICategory>; }
}
ContentModel类中的

永远不会起作用。来自digging around的建议是将其更改为IEnumerable,它确实支持逆变。

答案 2 :(得分:3)

在实施Quirijn建议之后的工作就像 组件c =(组件)模型; c.Categories [0] ......

谢谢, Vikas Kumar

答案 3 :(得分:2)

您是否已将类别发布到目标位置?

答案 4 :(得分:0)

是的,如果您将类别发布到Broker数据库,请先验证。将Page或Component XML反序列化为IPage或IComponent对象的方式非常简单。

同时指出您正在使用的DD4T版本。我记得早期版本中存在反序列化的问题。