有没有一种方法可以在Umbraco 7.6.3中不用@Model来访问媒体选择器

时间:2018-12-29 14:47:42

标签: model umbraco media picker

我已经接管了建立在Umbraco 7.6.3中的网站的管理,并且构建该系统的公司已使用了传统的.Net MVC。这意味着Umbraco固有的许多功能都将丢失。

我需要能够渲染使用Media.Picker选择的图像,但是唯一可以找到有关访问该对象的任何文档的地方都要求我在umbraco中使用@Model才能解决Url所选图像的

如果我尝试通过继承使用标准的Umbraco模型

@inherits Umbraco.Web.Mvc.UmbracoViewPage 

我收到以下错误消息:因为集成了该系统的公司远远超出了Umbraco的最佳做法,并且为网站中的所有页面建立了自己的模型...

  

无法绑定源类型   ClassName.Web.ViewModels.Templates.HomeViewModel到模型类型   Umbraco.Core.Models.IPublishedContent。

我正在使用部分视图构建页面的所需部分

任何建议对我来说都是非常有用的吗?? !!!

在下面的代码中,@ogimageId.ToString()返回以下内容

[ Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache+DictionaryPublishedContent ]

而且我不知道如何直接从该对象获取URL或它的ID,以便我可以使用其下面的方法从图像ID获取URL。

@using Umbraco.Web;
@using Umbraco.Web.Extensions;
@using ClientDependency.Core.Mvc;
@{
    dynamic ogimageId = Umbraco.Field("ogimage", recursive: true);
    <!-- ogimageUrl: @ogimageId.ToString() -->
    string ogimage = Umbraco.Media(1143).umbracoFile.ToString();
}
<meta property="og:image" content="@ogimage" />

2 个答案:

答案 0 :(得分:0)

所以我在所有人没有机会回应之前就弄清楚了... 这是解决方案...没意识到会这么简单... Html.Raw为您转换ID。

string ogimageId = Html.Raw(Umbraco.Field("ogimage", recursive: true)).ToString(); string ogimage = Umbraco.Media(ogimageId).umbracoFile.ToString();

答案 1 :(得分:-1)

您可以使用MediaService来访问媒体。

@ApplicationContext.Current.Services.MediaService.GetById(1143).GetValue<string>("umbracoFile")

然后从该json字符串中提取网址。

dynamic media = JsonConvert.DeserializeObject(ApplicationContext.Current.Services.MediaService.GetById(1068).GetValue<string>("umbracoFile"));

最后,@media.src将为您提供URL。