2012-05-10 4 views
3

J'ai créé un code Razor pour sortir des images sur une page si elles existent. Il est détaillé ci-dessous et contient quelques vérifications simples pour empêcher le rendu d'un élément de liste vide. Le site a été mis en ligne et fonctionne bien. Le client a ensuite supprimé l'image du dossier multimédia dans Umbraco, ce qui signifiait que mon nœud avait une image valide assignée mais que l'image n'existait pas. Je suis l'exception suivante:Test de l'existence des cultures d'images avec Razor dans Umbraco

« string » ne contient pas de définition pour « cultures »

Comment puis-je régler ce problème?

@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> 

Répondre

0

Dans ce cas, vous devrez probablement effectuer une vérification de type. Je crois que la méthode MediaById doit renvoyer une DynamicNode si elle est valide, donc quelque chose comme ce qui suit devrait fonctionner:

if(image.GetType() == typeof(DynamicNode)) 
{ 
    ... 
} 
0

Je recevais cette question. Ce que j'ai trouvé est que l'appel de Model.MediaById (imageid) lèverait une exception si le média avait été supprimé (et avait déjà été choisi dans le passé).

configuration Je mon test comme ceci:

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");  
}  

je reçois toujours l'erreur, mais il n'affiche à l'utilisateur.

J'ai trouvé qu'il n'arriverait jamais à ma vérification DynamicMedia donc j'ai dû ajouter l'essayer ... catch() autour de l'appel ou bien à l'ensemble de la macro échouerait.

Questions connexes