2012-05-24 82 views
5

我有ContainerWidget和具有ShowAllLinkCaption字段的自定義容器類型。 現在我只有一個解決方案,它看起來很醜。 在Container Widget視圖上獲取此字段值的正確方法是什麼?Orchard CMS:從視野中獲取字段值的正確方法?

@*Latest news widget*@ 
@using Orchard.ContentManagement 
@using Orchard.Utility.Extensions 
@{ 
    var contentId = (int)Model.ContentItem.ContainerWidgetPart.Record.ContainerId; 
    IContentManager contentManager = WorkContext.Resolve<IContentManager>();  
    var customListContentItem = contentManager.Get(contentId); 
    var showAllLinkCaptionField = customListContentItem.Parts.SelectMany(p => p.Fields).First(f => f.Name == "ShowAllLinkCaption"); 
    var showAllLinkCaptionText = showAllLinkCaptionField.Storage.Get<string>(null); 
} 
@Display(Model.Content) 
@Html.Link(showAllLinkCaptionText, Url.ItemDisplayUrl(customListContentItem)) 

回答

13

ContentItem是一個動態對象,允許直接訪問零件和字段,而無需使用那些醜陋的Lambda。你只需要知道該領域的部分的名稱,你可以這樣做:

someContentItem.ThePartThatHasTheField.TheField.TheNameOfThePropertyYouWantToAccess 
+0

更好的幫助來自伯特蘭......我不知道如何能夠沒有他的幫助下得出這個結論! –

+0

伯特蘭給了我一直在尋找的一個偉大的anwser!烏節的「聖盃」和什麼讓烏節如此之大... 但是你知道有一個「但」來了,是不是? ;) 我有這個:'currentUser.UserCulturePart.Fields [0] .Value;' 它的工作很棒。 我也有一個foreach循環遍歷這個內容部分的字段並列出它的名字。它只有一個名稱爲「Culture」的字段。但是,如果我嘗試像這樣訪問它: 'currentUser.UserCulturePart.Culture.Value'它拋出一個錯誤,它不包含文化... 任何想法? –

+0

關於我最後的評論。我在我的migrations.cs中使用了.WithField(「Culture」)...或許值得注意的是,在保存它們時將.Trim()由於這是非常難以調試的,並且使用其中有空格的字段名是不可能的。我已經設法在字段名稱中使用空格來分解一些代碼。 –

相關問題