Alexey Ryazhskikh
Alexey Ryazhskikh

Reputation: 2500

Orchard CMS: Right way to get field value from view?

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

Answers (1)

Bertrand Le Roy
Bertrand Le Roy

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

Related Questions