2012-11-12 1 views
1

J'ai besoin d'accéder à mediapickerfield en mode Widget. Ce champ est relatif à 'ActionPart'.Comment obtenir Media Picker Field via un enregistrement proxy de many-to-many dans le verger

J'ai un problème lorsque je crée des relations plusieurs-à-plusieurs pour afficher mon 'ActionPart' dans le widget. Quand j'ai mappé plusieurs-à-plusieurs, je prends un 'ActionPart' et je ne peux pas accéder au champ mediapickerfield.

cours Enregistre

public class ActionPartRecord : ContentPartRecord 
{ 
    public virtual string Text { get; set; } 
    public virtual double Price { get; set; } 
    public virtual int TextPosX { get; set; } 
    public virtual int TextPosY { get; set; } 
    public virtual String TextSale { get; set; } 
    public virtual int Color { get; set; } 
} 

public class ActionListRecord 
{ 
    public virtual int Id { get; set; } 
    public virtual ActionPartRecord ActionPartRecord { get; set; } 
    public virtual ActionWidgetPartRecord ActionWidgetPartRecord { get; set; } 
} 

public class ActionWidgetPartRecord : ContentPartRecord 
{ 
    public ActionWidgetPartRecord() 
    { 
     ActionList = new List<ActionListRecord>(); 
    } 
    public virtual IList<ActionListRecord> ActionList { get; set; } 
} 

public class ActionWidgetPart : ContentPart<ActionWidgetPartRecord> 
{ 
    public IEnumerable<ActionPartRecord> ActionList 
    { 
     get 
     { 
      return Record.ActionList.Select(x => x.ActionPartRecord); 
     } 
    } 
} 

classe ActionPart

public class ActionPart : ContentPart<ActionPartRecord> 
{ 
    public String Text 
    { 
     get { return Record.Text; } 
     set { Record.Text = value; } 
    } 
    /*other field*/ 
} 

Migrations
public int Create() 
{ 
    SchemaBuilder.CreateTable("ActionPartRecord", table => table 
     .ContentPartRecord() 
     .Column<string>("Text") 
     .Column<double>("Price") 
     .Column<int>("TextPosX") 
     .Column<int>("TextPosY") 
     .Column<string>("TextSale") 
     .Column<int>("Color") 
     ); 

    ContentDefinitionManager.AlterPartDefinition("ActionPart", 
    builder => builder 
     .WithField("BaseImage", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Action Image")) 
     .WithField("PatternImage", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Pattern Image")) 
     .WithField("TimeExp", fieldBuilder => fieldBuilder.OfType("DateTimeField").WithDisplayName("Expecting date")) 
    .Attachable()); 

    ContentDefinitionManager.AlterTypeDefinition("Action", cfg => cfg 
     .WithPart("CommonPart") 
     .WithPart("TitlePart") 
     .WithPart("RoutePart") 
     .WithPart("BodyPart") 
     .WithPart("ActionPart") 
     .Creatable() 
     .Indexed()); 

    SchemaBuilder.CreateTable("ActionListRecord", 
     table => table 
      .Column<int>("Id", column => column.PrimaryKey().Identity()) 
      .Column<int>("ActionPartRecord_Id") 
      .Column<int>("ActionWidgetPartRecord_Id") 
     ); 

    SchemaBuilder.CreateTable("ActionWidgetPartRecord", table => table 
     .ContentPartRecord() 
    ); 

    ContentDefinitionManager.AlterPartDefinition(
     "ActionWidgetPart", 
     builder => builder.Attachable()); 

    ContentDefinitionManager.AlterTypeDefinition("ActionWidget", cfg => cfg 
     .WithPart("ActionWidgetPart") 
     .WithPart("WidgetPart") 
     .WithPart("CommonPart") 
     .WithSetting("Stereotype", "Widget")); 
    return 1; 
} 

Driver méthode d'affichage

protected override DriverResult Display(
    ActionWidgetPart part, 
    string displayType, 
    dynamic shapeHelper) 
{ 
    return ContentShape("Parts_ActionWidget", 
        () => shapeHelper.Parts_ActionWidget(
         ContentPart: part, 
         ActionList: part.ActionList)); 
} 

Widget Voir

@foreach (var action in Model.ActionList) 
{ 
    <div class="item"> 

     *How to access BaseImage Field in this row* 

     <div class="sale-pattern"></div> 
     <div class="container"> 
      <div class="carousel-caption"> 
       <h1>@action.Text</h1> 
       <h1 class="price">@action.Price</h1> 
      </div> 
     </div> 
    </div> 
} 
+0

Bienvenue sur SO. Par vos messages avec des tags bien connus et utilisés, vous augmentez considérablement le nombre de personnes qui les lisent. Je viens d'ajouter C# (une supposition éclairée du code ci-dessus). – marko

Répondre

1

Im reslove un problème avec la prochaine partie du code:

@foreach (var action in Model.ActionList) 
{ 
var contentId = (int)action.Id; 
var contentManager = WorkContext.Resolve<IContentManager>(); 
dynamic contentItem = contentManager.Get(contentId).As<ActionPart>(); 

    <div class="item"> 
    <img src="@(((string)contentItem.BaseImage.Url).Replace("~/",""))" alt=""> 
    <div class="sale-pattern"></div> 
    <div class="container"> 
     <div class="carousel-caption"> 
      <h1>@action.Text</h1> 
      <h1 class="price">@action.Price</h1> 
     </div> 
    </div> 
</div> 
}