DD4T和动态链接

时间:2012-03-15 14:03:39

标签: tridion

使用DD4T在视图中动态解析组件链接 - 不在使用ResolveRichText()的富文本字段中 - 但如果组件A具有组件链接字段,其中包含指向组件B的链接,并且在视图中,您希望将URL呈现给页面组件B发布在...

解决方案中没有这方面的帮助 - 是吗?

ASP.NET MVC 3有点生疏,所以纯粹主义者会把目光移开,但是下面的工作,我只需要创建Html Helper。

@using DD4T.Providers.SDLTridion2011sp1;

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

虽然有点奇怪,项目中已经没有帮助了。

干杯

3 个答案:

答案 0 :(得分: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>

我们很快就会在框架中加入这一点。

答案 1 :(得分:6)

确实没有用于解析链接的HTML帮助程序。主要原因可能是(根据MVC原则)链接应该已经在您的视图渲染的模型中得到解决。

如果从dd4t.ContentModel项目中签出ContentModel类,则组件的(已注释掉)属性“ResolvedUrl”。这从未实现,但它是解决链接的更加合适的地方。 但是你的代码完成了这项工作,所以随意实现你自己的HTML帮助器。

答案 2 :(得分:2)

添加自己的扩展方法的好处是你可以在那里另外做一些事情。

我们使用它来区分component.Multimedia.Url和LinkFactory.ResolveLink(component.Id),具体取决于组件是多媒体组件或常规组件的天气(因为通常不会放置像PDF文件这样的多媒体组件在页面上,动态链接解析不会为您返回结果。