在DD4T视图中,我试图在类别中选择关键字的Path值。
foreach(var category in @Model.Categories)
{
if (category.Title.Contains("Taxonomy"))
{
str = category.Keywords[0].Path;
break;
}
}
但在@ Model.Categories中获取null。
错误:对象引用未设置为对象的实例。
虽然数据存在于XML中。
请建议。
答案 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版本。我记得早期版本中存在反序列化的问题。