4

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

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

        break;
    }
}

但在@Model.Categories 中为空。

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

尽管数据存在于 XML 中。

请建议。

4

5 回答 5

7

我发现这是 DD4T 中的一个问题。解决方法非常简单:如果您使用组件(或页面)的实现作为模型,而不是接口,它就可以工作。

所以开始你的观点:

@model DD4T.ContentModel.Component

而不是

@model DD4T.ContentModel.IComponent

然后再试一次。

于 2012-06-19T21:21:45.723 回答
4

我已在此处的 DD4T Google 代码站点中将此记录为问题。

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

IList<ICategory> IComponent.Categories
{
    get { return Categories as IList<ICategory>; }
}

在 ContentModel 类中将永远无法工作。挖掘的建议是将其更改为支持逆变的 IEnumerable。

于 2012-06-20T19:53:11.687 回答
3

它在实施 Quirijn 建议后工作,如 Component c = (Component)Model; c.类别[0]...

谢谢,维卡斯库马尔

于 2012-06-20T05:51:44.767 回答
2

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

于 2012-06-19T14:34:56.967 回答
0

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

还要指出您使用的是哪个版本的 DD4T。我记得在早期版本中存在反序列化问题。

于 2012-06-19T16:08:57.840 回答