3

DD4T を使用してビュー内のコンポーネント リンクを動的に解決する - を使用してリッチ テキスト フィールド内ではなくResolveRichText()- ただし、コンポーネント A にコンポーネント B へのリンクを含むコンポーネント リンク フィールドがあり、ビュー内でコンポーネント B が公開されているページへの URL をレンダリングする場合。 ..

ソリューションにはこれに対するヘルパーはありません - そうですか?

ASP.NET MVC 3 では少しさびているので、純粋主義者は目をそらしますが、次のように動作します。Html ヘルパーを作成するだけです。

@using DD4T.Providers.SDLTridion2011sp1;

@{
    var linkFactory = new LinkFactory();
    linkFactory.LinkProvider = new TridionLinkProvider();
    var link = linkFactory.ResolveLink(Model.Component.Fields["related_link"].LinkedComponentValues[0].Id);
}

少し奇妙でしたが、このプロジェクトにはまだヘルパーがありません。

乾杯

4

3 に答える 3

9

私はあなたが正しいと思います、これはフレームワークにあるはずです。しかし幸いなことに、これを追加するのは非常に簡単です。次のような拡張メソッドを使用してヘルパー クラスを作成するだけです。

namespace MyApp.Helpers
{
    public static class ModelHelper
    {
        public static string GetResolvedUrl(this IComponent component)
        {
            return GetResolvedUrl(component, null, null);
        }
    }
}

ここで、ビューが名前空間 MyApp.Helpers を使用していることを確認したら、コンポーネント ビューでこれを行うことができます。

@model DD4T.ContentModel.Component
@using MyApp.Helpers
<a href="@Model.GetResolvedUrl()">click here</a>

これをすぐにフレームワークに含める可能性があります。

于 2012-03-16T09:41:24.373 に答える
6

実際、リンクを解決するための HTML ヘルパーはありません。主な理由はおそらく、(MVC の原則に従って) ビューがレンダリングしているモデルでリンクが既に解決されている必要があるためです。

dd4t.ContentModel プロジェクトから ContentModel クラスをチェックアウトすると、コンポーネントの (コメント アウトされた) プロパティ 'ResolvedUrl' があります。これは実装されていませんが、リンクを解決するためのより適切な場所です。しかし、あなたのコードが仕事をするので、独自の HTML ヘルパーを自由に実装してください。

于 2012-03-16T06:25:46.207 に答える
2

独自の拡張メソッドを追加することの良い点は、そこで何かを追加できることです。

たとえば、天候に応じて component.Multimedia.Url と LinkFactory.ResolveLink(component.Id) を区別するために使用します (PDF ファイルのようなマルチメディア コンポーネントは通常、ページに配置されないため)。そのため、動的リンク解決は結果を返しません。

于 2012-03-16T11:05:31.387 に答える