首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DD4T和动态链接

DD4T和动态链接
EN

Stack Overflow用户
提问于 2012-03-15 22:03:39
回答 3查看 1.1K关注 0票数 3

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

在解决方案中没有这个帮助器-是这样的吗?

HTMLMVC3有点生疏了,所以纯粹主义者把目光投向别处,但是下面的工作,我只需要创建ASP.NET Helper。

代码语言:javascript
复制
@using DD4T.Providers.SDLTridion2011sp1;

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

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

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-16 14:25:46

确实没有用于解析链接的HTML助手。主要原因可能是(根据MVC原则)链接应该已经在视图呈现的模型中解析。

如果您从dd4t.ContentModel项目中签出ContentModel类,则组件有一个(已注释掉)属性'ResolvedUrl‘。这从来没有实现过,但它是解决链接的更合适的地方。但是您的代码可以完成这项工作,所以您可以随意实现您自己的HTML helper。

票数 6
EN

Stack Overflow用户

发布于 2012-03-16 17:41:24

我认为你是对的,这应该在框架中。但幸运的是,添加这一点非常容易。只需创建一个具有如下扩展方法的helper类:

代码语言:javascript
复制
namespace MyApp.Helpers
{
    public static class ModelHelper
    {
        public static string GetResolvedUrl(this IComponent component)
        {
            return GetResolvedUrl(component, null, null);
        }
    }
}

现在,如果您确保视图使用的是名称空间MyApp.Helpers,则可以在组件视图中执行此操作:

代码语言:javascript
复制
@model DD4T.ContentModel.Component
@using MyApp.Helpers
<a href="@Model.GetResolvedUrl()">click here</a>

我们很可能很快就会在框架中包括这一点。

票数 9
EN

Stack Overflow用户

发布于 2012-03-16 19:05:31

添加自己的扩展方法的好处是你可以在其中做一些额外的事情。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9721349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档