2012-03-15 81 views
3

使用DD4T動態解析視圖中的組件鏈接 - 不是在使用ResolveRichText()的富文本字段中 - 但是如果組件A具有鏈接組件B的鏈接字段並且在視圖中想要呈現url頁面組件B發佈在...DD4T和動態鏈接

在解決方案中沒有幫助者 - 是嗎?

與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); 
} 

雖然有點奇怪,但項目中並沒有幫手。

Cheers

回答

6

確實沒有解析鏈接的HTML助手。主要原因可能是(根據MVC原則)鏈接應該已經在您的視圖呈現的模型中得到解決。

如果您從dd4t.ContentModel項目中檢出ContentModel類,則組件有一個(註釋掉)屬性ResolvedUrl。這是從未實現的,但它是解決鏈接的更合適的地方。 但是,您的代碼完成了這項工作,因此請隨時實施您自己的HTML幫助程序。

+0

謝謝阿爾貝。這個屬性是怎麼來的? – Neil 2012-03-16 08:43:23

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> 

我們很可能會在框架中加入這一點。

2

添加自己的擴展方法的好處是你有能力在那裏做額外的事情。

例如,我們用它來區分component.Multimedia.Url和LinkFactory.ResolveLink(component.Id),這取決於組件是多媒體組件還是常規組件(因爲多媒體組件如PDF文件通常不是放在一個頁面上,動態鏈接解析不會爲你返回結果