web-dev-qa-db-ja.com

Umbraco画像プロパティIDを使用してURLを取得する方法

わかりました。Umbraco/ C#は初めてです。カスタムメディアタイプをループしてアプリケーションのホームページのバナーを作成します。@ bannerUrlは常にimagesプロパティIDを返しますが、ファイルパスは返しません。資源。 Umbracoで作成されたカスタムメディアタイプから画像ファイルのパスを取得するにはどうすればよいですか。

たとえば、コードを参照してください。

var mediaFolder = Umbraco.Media(mediaFolderId);
var banners = mediaFolder.Children();

foreach (var banner in banners)
    {
     var bannerUrl = banner.image;

      <div style="background-image:url(@bannerUrl);"></div>

 }

変数bannerUrlは、URLのファイルパスではなく、常にデフォルトで画像IDを返します。ファイルパスを機能させるにはどうすればよいですか? VSのデバッガーでバナーオブジェクトの内容を検査すると、Urlプロパティに次のエラーがあることに気付きました。

Url = 'banner.Url' threw an exception of type 'System.NotSupportedException'

.Url行に沿って何かを使用することはできますが、それは機能しないようです。そのため、動的な方法を使用してUmbracoの画像プロパティのURLを取得する方法を提案します。

ありがとう。

11
rtn

誰かがこれにつまずいた場合の解決策:

 var bannerId = Umbraco.Media(banner.image); //banner.image is the property id.
 var bannerUrl = bannerId.Url;
16
rtn

「メディアID」を取得したら、MVCコントローラー/ APIコントローラー内で同じことを行うには、UmbracoHelperを使用することもできます。

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
var image = umbracoHelper.Media(mediaID);      // mediaID =  the (int)ID of the media
var imageURL = image.url;                      // imageURL now has the site root relative path of the media item
9
Russ

最近のUmbracoでは、強く型付けされたモデルを使用する方がはるかに優れています。

var bannerMediaItem = Umbraco.TypedMedia(banner.image); //banner.image is the property id.
var bannerUrl = bannerMediaItem.Url;
4