3

存在する場合は、画像をページに出力するためのRazorコードを作成しました。これについては以下で詳しく説明し、空白のリストアイテムが表示されないようにするための簡単なチェックがいくつか含まれています。サイトは稼働し、正常に機能しています。次に、クライアントはUmbraco内のメディアフォルダーから画像を削除しました。つまり、ノードに有効な画像が割り当てられましたが、画像が存在しませんでした。次の例外が発生しました。

「文字列」には「作物」の定義が含まれていません

どうすればこれに対処できますか?

@using umbraco.MacroEngines;
@inherits umbraco.MacroEngines.DynamicNodeContext
@using umbraco.presentation.nodeFactory
@using umbraco.cms.businesslogic.media

<ul>
    @foreach (dynamic client in @Model.Children)
    {
        var image = Model.MediaById(client.Logo);
        var crops = image.imageCropper.crops;

        <li>
            <h2><span>@client.Name</span></h2>

            @if (crops != null || crops.GetType().ToString() != "System.String")
            {
                <span class="itemImage">
                    <img src="@crops.Find("@name", "cropname").url" alt="@client.Name" />
                </span>
            }
        </li>
    }
</ul>
4

2 に答える 2

0

私はこの問題を抱えていました。私が見つけたのは、メディアが削除された (そして過去に既に選択されていた) 場合、Model.MediaById(imageid) 呼び出しが例外をスローすることです。

だから私はこのように私のテストを設定します:

dynamic mainMediaImage = new DynamicNull();
try
{
  mainMediaImage = Model.MediaById(related.eventMainImage);
}
catch(Exception e)
{
  <p style='display: none;'>@e.Message</p>
}
var cropUrl = "";

if(mainMediaImage.GetType() == typeof(DynamicMedia))
{  
   cropUrl = GetImageCropperUrl(Model.MediaById(related.eventMainImage).crops, "List Image");    
}       

それでもエラーが発生しますが、ユーザーには表示されません。

DynamicMedia チェックに到達しないことがわかったので、呼び出しの周りに try...catch() を追加する必要がありました。そうしないと、マクロ全体が失敗します。

于 2013-01-30T17:12:34.430 に答える
0

この場合、おそらく型チェックを行う必要があります。MediaById メソッドが有効な場合は DynamicNode を返す必要があると考えているため、次のようなものが機能するはずです。

if(image.GetType() == typeof(DynamicNode))
{
    ...
}
于 2012-05-16T03:34:19.277 に答える