Reputation: 2500
I have ContainerWidget and custom container type with ShowAllLinkCaption field. Now I have only one solution, and it's looks ugly. What is the right way to get this field value on a Container Widget View?
@*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))
Upvotes: 5
Views: 4972
Reputation: 17814
ContentItem is a dynamic object that allows direct access to parts and fields without having to use those ugly Lambdas. You just need to know the name of the part that has the field, and you can do:
someContentItem.ThePartThatHasTheField.TheField.TheNameOfThePropertyYouWantToAccess
Upvotes: 13