2012-11-12 20 views
1

我需要訪問Widget視圖中的mediapickerfield。該字段與「ActionPart」相關。如何通過代理記錄獲取媒體選擇器字段

我有一個問題,當我創建多對多的關係來顯示我的'ActionPart'的部件。

當我映射多對多時,我採用'ActionPart',但無法訪問mediapickerfield。

記錄類

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); 
     } 
    } 
} 

ActionPart類

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

遷移

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; 
} 

驅動顯示方法

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

小工具視圖

@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

歡迎SO。通過您熟悉並使用標籤的帖子,您可以大大增加閱讀人數。我剛剛添加了C#(從上面的代碼中得到了有根據的猜測)。 – marko

回答

1

林reslove有問題的代碼下一個部分:

@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> 
} 
相關問題