3

使用 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);
}

尽管这有点奇怪,但项目中已经没有帮手了。

干杯

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 回答