2012-04-17 2 views
2

콘텐츠 파트를 만든 다음 오차드의 콘텐츠 형식에 추가했습니다. 그러나 해당 유형의 컨텐트 항목을 만들려고 할 때 해당 부분의 속성 필드는 표시되지 않습니다. 문제가있는 위치에 대한 제안을 찾고 있습니다.과수원에서 콘텐츠 항목을 만들 때 콘텐츠 부분 편집보기가 표시되지 않음

UPD : 관련 코드 :

using JetBrains.Annotations; 
using ArealAds.Models; 
using Orchard.ContentManagement; 
using Orchard.ContentManagement.Drivers; 
using ArealAds.Models; 
using ArealAds.Services; 
using ArealAds.ViewModels; 

namespace ArealAds.Drivers { 
    [UsedImplicitly] 
    public class AdDriver : ContentPartDriver<AdPart> { 
     private readonly IAdService _adService; 

     public AdDriver (IAdService adService) 
     { 
      _adService = adService; 
     } 

     protected override string Prefix { 
      get { return "AdPart"; } 
     } 

     protected override DriverResult Display(
      AdPart part, string displayType, dynamic shapeHelper) { 

      return ContentShape("Parts_Ad",() => shapeHelper.Parts_Ad(
       Title: part.Title, 
       Url: part.Url, 
       Email: part.Email, 
       Phone1: part.Phone1, 
       Phone2: part.Phone2, 
       AreaName: part.AreaRecord.Name, 
       AreaId: part.AreaRecord.Id, 
       DistrictName: part.DistrictRecord.Name, 
       DistrictId: part.DistrictRecord.Id, 
       AllDistricts: part.AllDistricts)); 
     } 

     //GET 
     protected override DriverResult Editor(
      AdPart part, dynamic shapeHelper) { 

      return ContentShape("Parts_Ad_Edit", 
       () => shapeHelper.EditorTemplate(
        TemplateName: "Parts/Ad", 
        Model: BuildEditorViewModel(part), 
        Prefix: Prefix)); 
     } 
     //POST 
     protected override DriverResult Editor(
      AdPart part, 
      IUpdateModel updater, 
      dynamic shapeHelper) { 

      var model = new EditAdViewModel(); 
      updater.TryUpdateModel(model, Prefix, null, null); 

      if (part.ContentItem.Id != 0) { 
       _adService.Update(
        part.ContentItem, model); 
      } 

      return Editor(part, shapeHelper); 
     } 

     private EditAdViewModel BuildEditorViewModel(AdPart part) { 
      var avm = new EditAdViewModel { 
       Title = part.Title, 
       Url = part.Url, 
       Email = part.Email, 
       Phone1 = part.Phone1, 
       Phone2 = part.Phone2, 
       AllDistricts = part.AllDistricts, 
       Areas = _adService.GetAreas(), 
       Districts = _adService.GetDistricts() 
      }; 
      if (part.AreaRecord != null) { 
       avm.AreaName = part.AreaRecord.Name; 
       avm.AreaId = part.AreaRecord.Id; 
      } 
      if (part.DistrictRecord != null) { 
       avm.DistrictName = part.DistrictRecord.Name; 
       avm.DistrictId = part.DistrictRecord.Id; 
      } 
      return avm; 
     } 
    } 
} 

using System.ComponentModel.DataAnnotations; 
using Orchard.ContentManagement; 
using Orchard.ContentManagement.Records; 

namespace ArealAds.Models { 
    public class AdRecord : ContentPartRecord { 
     public virtual string Title { get; set; } 
     public virtual string Url { get; set; } 
     public virtual string Email { get; set; } 
     public virtual string Phone1 { get; set; } 
     public virtual string Phone2 { get; set; } 
     public virtual AreaRecord AreaRecord { get; set; } 
     public virtual DistrictRecord DistrictRecord { get; set; } 
     public virtual bool AllDistricts { get; set; } 
    } 

    public class AdPart : ContentPart<AdRecord> { 
     [Required] 
     public string Title { 
      get { return Record.Title; } 
      set { Record.Title = value; } 
     } 

     public string Url { 
      get { return Record.Url; } 
      set { Record.Url = value; } 
     } 

     public string Email { 
      get { return Record.Email; } 
      set { Record.Email = value; } 
     } 

     public string Phone1 { 
      get { return Record.Phone1; } 
      set { Record.Phone1 = value; } 
     } 

     public string Phone2 { 
      get { return Record.Phone2; } 
      set { Record.Phone2 = value; } 
     } 

     public AreaRecord AreaRecord { 
      get { return Record.AreaRecord; } 
      set { Record.AreaRecord = value; } 
     } 

     public DistrictRecord DistrictRecord { 
      get { return Record.DistrictRecord; } 
      set { Record.DistrictRecord = value; } 
     } 

     [Required] 
     public bool AllDistricts { 
      get { return Record.AllDistricts; } 
      set { Record.AllDistricts = value; } 
     } 
    } 
} 


@model ArealAds.ViewModels.EditAdViewModel 

<fieldset> 
    <legend>Area Fields</legend> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Title) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Title) 
    @Html.ValidationMessageFor(model => model.Title) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Url) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Url) 
    @Html.ValidationMessageFor(model => model.Url) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Email) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Email) 
    @Html.ValidationMessageFor(model => model.Email) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Phone1) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Phone1) 
    @Html.ValidationMessageFor(model => model.Phone1) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Phone2) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Phone2) 
    @Html.ValidationMessageFor(model => model.Phone2) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.AllDistricts) 
    </div> 
    <div class="editor-field"> 
    @Html.CheckBoxFor(model => model.AllDistricts) 
    @Html.ValidationMessageFor(model => model.AllDistricts) 
    </div> 

    <table> 
    <tr> 
    <td> 
    <div class="editor-label"> 
    @Html.LabelFor(model => model.AreaId) 
    </div> 
    <div class="editor-field"> 
    @Html.DropDownListFor(model => model.AreaId, 
          Model.Areas.Select(s => new SelectListItem { 
           Selected = s.Id == Model.AreaId, 
           Text = s.Name, 
           Value = s.Id.ToString() 
          }), 
         "Выберите район...") 
    @Html.ValidationMessageFor(model => model.AreaId) 
    </div> 
    </td> 
    <td>или</td> 
    <td> 
    <div class="editor-label"> 
    @Html.LabelFor(model => model.DistrictId) 
    </div> 
    <div class="editor-field"> 
    @Html.DropDownListFor(model => model.DistrictId, 
          Model.Districts.Select(s => new SelectListItem { 
           Selected = s.Id == Model.DistrictId, 
           Text = s.Name, 
           Value = s.Id.ToString() 
          }), 
         "Выберите округ...") 
    @Html.ValidationMessageFor(model => model.DistrictId) 
    </div> 
    </td> 
    </tr> 
    </table> 

</fieldset> 


      SchemaBuilder.CreateTable("AdRecord", table => table 
       .ContentPartRecord() 
       .Column<string>("Title") 
       .Column<string>("Url") 
       .Column<string>("Email") 
       .Column<string>("Phone1") 
       .Column<string>("Phone2") 
       .Column<int>("AreaRecord_Id") 
       .Column<int>("DistrictRecord_Id") 
       .Column<bool>("AllDistricts") 
      ); 

      ContentDefinitionManager.AlterPartDefinition(
       typeof(AdPart).Name, cfg => cfg.Attachable()); 

      ContentDefinitionManager.AlterTypeDefinition(
       "ArealAds_Ad", cfg => cfg 
       .WithPart("CommonPart") 
       .WithPart("AdPart") 
       .Creatable() 
      ); 
+0

당신이 게시 할 수 있습니다 부품 모델, 레코드, 드라이버 및 핸들러에 대한 코드? –

+0

@GiscardBiamby 코드를 게시했습니다. 도움을 주셔서 감사합니다 - 다시 :) 그런데, 당신의 경험으로, 과수원 초보자들 사이에서 공통적 인 문제가 있습니까? 아니면 저입니까? 저는 약 1 시간 동안 코드에서 에러를 찾고 단지 그것을 발견 할 수 없다고 생각한 후에 제 능력에 대해 걱정하기 시작합니다. <_ < –

+0

이러한 문제는 흔히 발생합니다. 나는 다른 사람들이 물어 보는 것과 똑같은 것들을 많이 보았고, 나는 새로운 기능을 시도 할 때 여전히 문제에 부딪친 다. –

답변

5

당신은 아마 placement.info에 항목을 놓치고있어. (대시 보드에있는 동안 테마가 활성화되지 않기 때문에,하지 yoru 테마에 대한 placement.info)

모듈에서 placement.info 파일에이 추가 :

`<Place Parts_Ad_Edit="Content:1" />` 
+0

정말로 고맙습니다. –

관련 문제