2015-11-03 143 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。 –