2014-04-19 3 views
2

게시시 MediaPart.MediaUrl을 사용자 지정 이미지에 자동으로 할당하려고합니다. 그러나 .. MediaPickerField MediaParts는 항상 null입니다.MediaPart의 미디어 URL을 설정하는 방법은 무엇입니까? Orchard MediaLibraryPickerField MediaParts가 null입니다.

 OnPublished<BlogPostPart>((context, part) => 
     { 
      ContentPart cp = part.ContentItem.Parts.Skip(13).First(); 
      MediaLibraryPickerField field = cp.Fields.FirstOrDefault() as MediaLibraryPickerField; 
      if (field != null) { 
       // this part throws an object null reference exception since fields.MediaParts is null 
       foreach(Orchard.MediaLibrary.Models.MediaPart mp in field.MediaParts){ 

       } 
      } 
     }); 

공개적으로 이벤트의 코드에서 MediaUrl을 프로그래밍 방식으로 설정하는 방법은 무엇입니까? Orchard를 사용 중입니다.

답변

0

MediaParts는 값이 불필요하게 가져 오지 않도록 지연 필드로 구현됩니다. 게으른 필드의 로더는 Loaded 이벤트 중에 필드의 핸들러에 의해 설정됩니다.

방금 ​​생성 된 콘텐츠 항목은 , CreatedPublishing을 통과하여 Published이됩니다. 즉, 미디어 라이브러리 선택기 필드의 미디어 파트 모음을 지금 사용할 수 없습니다.

정확히 무엇을하려는 것입니까?

또한 콘텐츠 항목의 순서 나 개수에 의존해서는 안되며 따라서 Skip(13)은 원하는 부분에 도달하는 올바른 방법이 아닙니다.

+0

이것이 내가 원하는 것입니다.> 라이브 작가 또는 단어에서 블로그 게시물을 게시 할 때 첫 번째 이미지 (있는 경우)를 미디어 라이브러리 선택기 필드의 기본 이미지로 만들고 싶습니다. 나중에 내가 원한다면 이미지를 다른 것으로 바꿀 수 있습니다. 그래서 게시 된 이벤트에서 블로그 게시물에서 추출한 미디어 URL을 설정하려고합니다. 나는 스킵 (17)이 디버깅을 위해서 단지 놓여 졌다는 것에 동의한다 :) –

+0

글쎄, 좋은 점은 미디어 파트 모음이 비어 있다는 것을 알 수 있다는 것이다. 속성에 빈 컬렉션을 할당 한 다음 미디어를 추가하고 다시 게시하십시오 (무한 루프에주의). –

+0

필자는 필자가 URL을 얻을 필요가 있었고 몇 시간 동안 고생했다. 필자가 발견 한 해결 방법은 해당 시점에서 사용할 수있는 필드에서 제공 한 ID를 사용하여 ContentManager를 통해 MediaPart를 얻는 것이 었습니다. 'MediaLibraryPickerField photoMediaPicker = photoField MediaLibraryPickerField로서'' MediaPart photoMediaPart = _orchardServices.ContentManager.GetMany (photoMediaPicker.Ids, VersionOptions.Published, QueryHints.Empty) .ToList() FirstOrDefault().' (않는다면, onUpdated OnPublished에 의해 트리거 된 처리기). 희망 사항은 동일한 문제가있는 누군가에게 도움이되기를 바랍니다. 감사합니다. – krbnr