2012-07-30 10 views
5

MediaPickerFields aún me elude.El trabajo de Orchard CMS con MediaPickerField definido en Migrations.cs

he definido una nueva parte en Migrations.cs y ha añadido una columna Boolean y una MediaPickerField a la parte de la siguiente manera:

SchemaBuilder.CreateTable("ImageContentPartRecord", table => 
      table.ContentPartRecord() 
      .Column("DisplayImage", DbType.Boolean)); 

ContentDefinitionManager.AlterPartDefinition("ImageContentPart", builder => 
      builder 
       .Attachable() 
       .WithField("ImageField", fld => 
        fld.OfType("MediaPickerField") 
        .WithDisplayName("Image"))); 

Suponiendo que tengo ImageContentPart y ImageContentPartRecord clases, ¿cómo puedo recuperar los datos desde mi MediaPickerField (url, dimensiones, texto alternativo, clase, etc.) en mi controlador y en mis plantillas de partes (edición/visualización)?

decir - Parts.ImageContent.cshtml (que quiero lograr algo como esto):

<div> 
    <img src="@Model.ImageField.Url" alt="@Model.ImageField.Alt" /> 
</div> 

¿Alguna idea?

+1

Después de excavar, tengo la solución. Lo publicaré pronto. – chrisriesgo

Respuesta

4

Aquí está la solución:

En mi método de visualización para el conductor, me aseguro de pasar mi ImageContentPart (part) en la construcción de la ContentShape:

return ContentShape("Parts_ImageContent",() => 
      shapeHelper.Parts_ImageContent(
       Content: part)); 

Luego, en mi plantilla de vista, que aprovechan la naturaleza dinámica de la arquitectura de Orchard para consumir mi MediaPickerField. Para hacerlo, acceda a la propiedad .ContentItem de su parte, luego, apoyándose en la dinámica, encadene el nombre de la parte (.ImageContentPart) y luego el nombre del campo (.ImageContent) para acceder al campo.

@{ 
    // Attempting to access MediaPickerField named 'ImageContent' 
    var image = Model.Content.ContentItem.ImageContentPart.ImageContent; 

    // Leaning on Orchard dynamics to access properties of the field 
    var url = image.Url; 
} 

<img src="@url" alt="@T(image.AlternateText)" /> 

Aquí es una lista exhaustiva de las propiedades de MediaPickerField \\Orchard.Fields\Views\Fields\MediaPicker.cshtml:

@* 
    Alternate Text: @Model.ContentField.AlternateText 
    Class: @Model.ContentField.Class 
    Style: @Model.ContentField.Style 
    Alignment: @Model.ContentField.Alignment 
    Width: @Model.ContentField.Width 
    Height: @Model.ContentField.Height 
    Url: @Model.ContentField.Url 


    You can also display an image using this example, and add the attributes you need: 
    <img src="@Href(Model.ContentField.Url)" /> 
*@ 

Con suerte, si te topas con un problema similar, esto ayudará a cabo!

Cuestiones relacionadas