2015-11-03 90 views
1

我試圖呈現媒體圖像列表。Umbraco 7呈現媒體類型圖像

在我看來,我有:

查看

@section pageSpecificJsBody { 
    <script src="/scripts/casestudieslist.js"></script> 

    <script> 
     $(function() { pdms.caseStudiesList.init(); }); 
    </script> 
} 

這是用來調用一個js文件

JS文件調用下面的控制器

控制器

[HttpGet] 
public JsonResult List() 
{ 
    var CaseStudyContentTypeId = Services.ContentTypeService.GetContentType("CaseStudy").Id; 

    var CaseStudies = Services.ContentService.GetContentOfContentType(CaseStudyContentTypeId).Select(x => new CaseStudy { 
     BannerImage = Umbraco.Content(x.Id).GetPropertyValue("bannerimage"),    
     Url = Umbraco.Content(x.Id).Url.ToString(), 
     SectorName = Umbraco.Content(x.GetValue("selectSector")).Name, //x.GetValue("selectSector").ToString(), 
     BodyTextHeading = x.GetValue("bodyTextHeading").ToString(), 
     BannerHeading = x.GetValue("bannerheading").ToString() 
}); 

型號

public class CaseStudy 
{ 
    public string SectorName { get; set; } 
    //public int Id { get; set; } 
    public string Url { get; set; } 
    public string BannerHeading { get; set; } 
    public string BannerImage { get; set; } 
    public string BodyTextHeading { get; set; } 
} 

此前橫幅圖片是使用媒體選擇這樣的圖像可以通過Umbraco.Content訪問,但是現在我已經將它們都使用哪些設置它們的自定義栽跟頭到媒體類型

我的問題是...我現在如何設置BannerImage屬性以獲取相關媒體圖像?

通常我可以在視圖中做類似的事情。

var BannerImage = Model.Content.GetPropertyValue("bannerimage"); 

var MediaImage = Umbraco.TypedMedia((int)BannerImage); 

<source srcset="@MediaImage.GetCropUrl("desktopMax")" /> 

但我沒有控制器訪問模型,因爲點多,我很堅持,我還是新的一把umbraco和還沒有完全明白了一切,很抱歉,如果事情是不明確的。

在此先感謝

回答

1

您可以通過執行獲得了很多地方(包括控制器)的@Umbraco幫手:

UmbracoHelper umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 

我可能會重寫你的代碼看起來像這樣:

var caseStudies = from caseStudy in Services.ContentService.GetContentOfContentType(CaseStudyContentTypeId) 
     let content = umbracoHelper.TypedContent(caseStudy.Id) 
     let bannerImage = umbracoHelper.TypedMedia(caseStudy.GetPropertyValue("bannerimage")) 
     let sector = umbracoHelper.TypedContent("selectSector") 
     select new CaseStudy { 
     BannerImage = bannerImage.Url, 
     Url = content.Url, 
     SectorName = sector.Name, 
     BannerHeading = caseStudy.GetPropertyValue<string>("bannerheading"), 
     BodyTextHeading = caseStudy.GetPropertyValue<string>("bodyTextHeading" 
     }; 
+0

嗨,山姆感謝您的答覆,我做了類似的事情,我會張貼,但沒有機會測試/計算出你的代碼和我用過的東西之間的差異 –

0

我發現此帖子Here,這對獲取圖片的裁剪網址有很好的建議。

這裏就是我寫來解決這個問題:

控制器

var CaseStudyContentTypeId = Services.ContentTypeService.GetContentType("CaseStudy").Id; 

      var CaseStudies = Services.ContentService.GetContentOfContentType(CaseStudyContentTypeId).Select(x => new CaseStudy 
      { 
       BannerImage = Umbraco.TypedMedia(x.GetValue<int>("bannerimage")).GetCropUrl("umbracoFile", "mobile"), 
       Url = Umbraco.Content(x.Id).Url.ToString(), 
       SectorName = Umbraco.Content(x.GetValue("selectSector")).Name, //x.GetValue("selectSector").ToString(), 
       BodyTextHeading = x.GetValue("bodyTextHeading").ToString(), 
       BannerHeading = x.GetValue("bannerheading").ToString() 
      }); 

我要去調試和測試出薩姆斯方法,這樣我就可以工作了兩個例子之間的差異。如果有人(或薩姆)能夠提供建議,說明他們爲什麼認爲某種方式可能比另一種方式更有益,請您給出解釋。

在此先感謝。

+0

你不會想要使用內容服務來返回發佈的內容,因爲它會觸及數據庫而不是緩存。改用UmbracoHelper。 –