3

カスタム ニュース リスト MVC テンプレートに表示する RelatedImageというニュース ウィジェットにカスタム フィールドを追加しました。

注:カスタム フィールドは、「複数の画像をアップロードまたは選択できる」という制限が設定された関連メディア (画像、ビデオ、ファイル) フィールドです。

次のようにカスタム フィールドをループすることで、画像の URL を取得できます。

@foreach (var relatedItem in item.Fields.RelatedImage)
{
    <li>@relatedItem.Fields.MediaUrl</li>
}  

上記のコードは機能し、URL をレンダリングします。

次のようなコードは、正しい値を出力します。

@item.Fields.RelatedImage.Length

ただし、制限を「アップロードまたは選択できる画像は 1 つだけ」に設定すると、変更に使用されるモデルが@item.Fields.RelatedImage変更されるため、これらのプロパティが存在しないため、上記のコードは例外をスローします。

必要なのは、リスト内のニュース項目ごとに 1 つの画像のみをレンダリングすることですが、「画像を 1 つだけ...」制限モードに切り替えると、モデルがどのように見えるか、またはどのように取得するかを理解できません。そのプロパティのホールド。したがって、次のコードは機能しません。

@item.RelatedItem("RelatedImage").Fields.MediaUrl

したがって、今の私にとっての質問はイライラするものです:テンプレート/ビューに渡されたモデルをどのように知ることができますか? さまざまなオプションを出力しようとしましGetType().ToString()たが、繰り返し取得するのは ItemViewModel だけで、役に立ちません!

編集 - 次のコードは実際に機能します。

<img src="@Html.Raw(item.Fields.RelatedImage.Fields.MediaUrl)" />

しかし、これを理解するのはイライラするほど困難でした。Type RelatedImage が何であるかをどのように把握しますか。プロパティ Fields は動的なタイプであり、物事をより複雑にします。

4

1 に答える 1

3

フィールドが 1 つの画像を許可するように設定されている場合、RelatedImage返される値の型は になりますTelerik.Sitefinity.Libraries.Model.Image

フィールドが複数の画像を許可するように設定されている場合、返される値は同じタイプの配列になります。Telerik.Sitefinity.Libraries.Model.Image[]

あなたの質問に答えるために、RelatedImageプロパティのタイプを確認できます。

@if (item.Fields.RelatedImage is Image)
{
    <img src="item.Fields.RelatedImage.Fields.MediaUrl" />
}
else if (item.Fields.RelatedImage is Image[])
{
    foreach (var relatedItem in item.Fields.RelatedImage)
    {
        <img src="relatedItem.Fields.MediaUrl" />
    } 
}

より良い方法は、ビューモデルを構築するときに にあるGetRelatedItems拡張機能を使用することです。Telerik.Sitefinity.RelatedData.RelatedDataExtensions

viewModel.RelatedImages = newsItem.GetRelatedItems<Image>("RelatedImage")

選択した画像の数に関係なく、Image オブジェクトのコレクションを返します。

于 2016-02-17T14:13:22.847 に答える