使用DD4T动态解析视图中的组件链接-而不是使用ResolveRichText()在富文本字段中-但是如果组件A有一个组件链接字段,其中包含到组件B的链接,并且在您的视图中,您希望呈现一个指向组件B发布到的页面的url ...
在解决方案中没有这个帮助器-是这样的吗?
HTMLMVC3有点生疏了,所以纯粹主义者把目光投向别处,但是下面的工作,我只需要创建ASP.NET 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);
}虽然这有点奇怪,但项目中已经没有这个帮助器了。
干杯
发布于 2012-03-16 14:25:46
确实没有用于解析链接的HTML助手。主要原因可能是(根据MVC原则)链接应该已经在视图呈现的模型中解析。
如果您从dd4t.ContentModel项目中签出ContentModel类,则组件有一个(已注释掉)属性'ResolvedUrl‘。这从来没有实现过,但它是解决链接的更合适的地方。但是您的代码可以完成这项工作,所以您可以随意实现您自己的HTML helper。
发布于 2012-03-16 17:41:24
我认为你是对的,这应该在框架中。但幸运的是,添加这一点非常容易。只需创建一个具有如下扩展方法的helper类:
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-16 19:05:31
添加自己的扩展方法的好处是你可以在其中做一些额外的事情。
例如,我们使用它来区分component.Multimedia.Url和LinkFactory.ResolveLink(component.Id),这取决于组件是多媒体组件还是普通组件(因为像PDF文件这样的多媒体组件通常不会放在页面上,所以动态链接解析不会为您返回结果。
https://stackoverflow.com/questions/9721349
复制相似问题