4

DD4T ビューで、カテゴリ内のキーワードのパスの値を選択しようとしています。

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

        break;
    }
}

ただし、@Model.Categories で null を取得します。

エラー: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

データは XML に存在しますが。

提案してください。

4

5 に答える 5

7

これは DD4T の問題であることがわかりました。回避策は非常に簡単です。インターフェイスではなく、コンポーネント (またはページ) の実装をモデルとして使用すると、機能します。

したがって、ビューを次のように開始します。

@model DD4T.ContentModel.Component

それよりも

@model DD4T.ContentModel.IComponent

そしてさらに試みる。

于 2012-06-19T21:21:45.723 に答える
4

私はこれを問題としてDD4TGoogleCodeサイトに記録しまし

これは、共変性がListとIListでサポートされていないことが原因のようです。つまり、次のような行になります。

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

ContentModelクラスでは機能しません。掘り下げることからの提案は、これを共変性をサポートするIEnumerableに変更することです。

于 2012-06-20T19:53:11.687 に答える
3

Component c = (Component)Model; のようなQuirijnの提案を実装した後の作業 c.カテゴリー[0]...

ありがとう、ヴィカス・クマール

于 2012-06-20T05:51:44.767 に答える
2

あなたはあなたのターゲットにあなたのカテゴリーを公開しましたか?

于 2012-06-19T14:34:56.967 に答える
0

はい、まずカテゴリを Broker Database に公開したかどうかを確認してください。Page または Component XML を IPage または IComponent オブジェクトに逆シリアル化する方法は、非常に簡単です。

また、使用している DD4T のバージョンも示してください。以前のリリースでは、逆シリアル化に問題があったことを覚えています。

于 2012-06-19T16:08:57.840 に答える