2012-07-30 15 views
5

MediaPickerFields ancora mi sfuggono.Orchard CMS funziona con MediaPickerField definito in Migrations.cs

ho definito una nuova parte in Migrations.cs e ha aggiunto una colonna Boolean e un MediaPickerField alla parte come segue:

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

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

Supponendo che ho ImageContentPart e ImageContentPartRecord classi, come posso recuperare i dati dal mio MediaPickerField (url, dimensioni, alt text, classe, ecc.) nel mio Driver e nei miei modelli di parte (modifica/visualizzazione)?

vale a dire - Parts.ImageContent.cshtml (che voglio realizzare qualcosa di simile):

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

Tutte le idee?

+1

Dopo aver scavato, ho la soluzione. Lo posterò presto. – chrisriesgo

risposta

4

ecco la soluzione:

Nel mio Metodo di visualizzazione driver, faccio in modo di passare il mio ImageContentPart (part) durante la costruzione del ContentShape:

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

Poi nel mio modello di vista, io sfruttare la natura dinamica dell'architettura di Orchard per consumare il mio MediaPickerField. Per fare ciò, si accede alla proprietà .ContentItem sulla propria parte, quindi si appoggia alla dinamica, si incolla il nome della parte (.ImageContentPart) e quindi il nome del campo (.ImageContent) per accedere 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)" /> 

Ecco un elenco esaustivo delle proprietà MediaPickerField da \\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)" /> 
*@ 

Speriamo che, se si inciampa su un problema simile, questo vi aiuterà fuori!

Problemi correlati