使用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);
}
虽然有点奇怪,项目中已经没有帮助了。
干杯
答案 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文件这样的多媒体组件在页面上,动态链接解析不会为您返回结果。