Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
You can define first create a media type to support the pdf media -
using System;
using System.ComponentModel.DataAnnotations;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.DataAnnotations;
using EPiServer.Framework.DataAnnotations;
namespace MyEpiserverSite.Models.Media
{
[ContentType(DisplayName = "GenericMedia", GUID = "89761dbb-bf22-4cee-93c7-9d661d75cad8", Description = "Used for generic file types such as Word or PDF documents.")]
[MediaDescriptor(ExtensionString = "pdf,doc,docx")]
public class GenericMedia : MediaData
{
[CultureSpecific]
[Editable(true)]
[Display(
Name = "Title",
Description = "Add a title of the content.",
GroupName = SystemTabNames.Content,
Order = 10)]
public virtual String Title{ get; set; }
[CultureSpecific]
[Editable(true)]
[Display(
Name = "Description",
Description = "Add a description of the content.",
GroupName = SystemTabNames.Content,
Order = 20)]
public virtual String Description { get; set; }
}
}
Then on the pagetype, you can just define one property called - PdfMedia
[CultureSpecific]
[Editable(true)]
[Display(
Name = "Pdf Media",
Description = "Add a media of the content.",
GroupName = SystemTabNames.Content,
Order = 10)]
public virtual GenericPdfMedia PdfMedia{ get; set; }
Then just render this property on the view with its internal properties
@Model.PdfMedia.Title
@Model.PdfMedia.Description
I'm not sure how this would actually work. Why would GenericPdfMedia work as a reference if we define above as GenericMedia? It doesn't, so I assume it was a typo, and change to GenericMedia. It compiles, but when I launch the site, I get:
Type 'XXX.XXXXXX.Models.Media.GenericMedia' could not be mapped to a PropertyDefinitionType
No sure if this is excactly what you want, but to build on Ravindra's code...
On the pagetype, change to:
public virtual ContentReference PdfMedia{ get; set; }
In your view
@Html.PropertyFor(m => m.PdfMEdia)
In /Views/Shared/DisplayTemplates/ create a file PdfMedia.cshtml with the content:
@model EPiServer.Core.ContentReference
@if (Model != null)
{
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
var pdf = contentLoader.Get<PdfMedia>(Model);
<h1>@pdf.Title</h1>
<strong>@pdf.Description</strong>
}
I am trying to create custom content/type for pages with downloadable media, such as a PDF. I want a few text fields, such as title and description of the file, and a way to upload a PDF, so that when the page is viewed, there'd be a way to view the PDF, via download, or somehow inline on the page.