2011-03-01 5 views
0

Je suis nouveau sur les templates Razor dans Umbraco (et en général), mais je préfère l'utiliser sur les fichiers XSLT. Cependant, j'ai rencontré un problème que je ne sais pas résoudre. Je reçois le message suivant:Umbraco Razor Template Error

An unknown error occured while rendering the following code: 
System.NullReferenceException: Object reference not set to an instance of an object. 
at RazorEngine.Dynamic.baeffbebc.Execute() 
at RazorEngine.Templating.TemplateService.Parse[T](String template, T model, String name) 
at umbraco.MacroEngines.RazorEngine.GetResult(String cacheIdentifier, String template, INode currentPage, String& result) 

Ma macro ressemble à ceci:

@using System 
@using uComponents.Core 
@using uComponents.Core.uQueryExtensions 
@using System.Linq 
@using umbraco.NodeFactory 
@helper NoPictures() 
{ 
    <li>Pictures coming soon!</li> 
} 

@helper Pictures(String crop) 
{ 
    <li><a rel="photos" href="@crop" title="test"> 
    <img src="@crop" class="shadow hovershadow"></a></li> 
} 
@{ 
    var n = Node.GetCurrent(); 
    var pictures = n.GetProperty("pictures").Value; 
    if(pictures.Length <= 0) 
    { 
    NoPictures(); 
    } 
    else 
    { 
    var pictureNodes = pictures.Split(','); 

    foreach (var pictureNode in pictureNodes) 
    { 
     var node = new Node(Convert.ToInt32(pictureNode)); 
     var photoId = node.GetProperty("picture").Value; 
     var photo = uComponents.Core.uQuery.GetMedia(Convert.ToInt32(photoId)); 
     var crop = MediaExtensions.GetImageCropperUrl(photo, "umbracoFile", "wide"); 
     Pictures(crop); 
    } 
    } 
} 

J'apprécie vraiment toute l'aide que tout le monde peut offrir ... même si elle me donne une idée comment déboguer ceci au sein d'Umbraco. Merci!

Edit: La version de Umbraco 4.6.1

Répondre

2

D'accord, mon code final était le suivant:

@using System 
@using uComponents.Core 
@using uComponents.Core.uQueryExtensions 
@using System.Linq 

@{ 
    var n = uQuery.GetCurrentNode(); 
    var pictures = n.GetProperty("pictures").Value; 
    if(pictures.Length > 0) 
    { 
    var pictureNodes = pictures.Split(','); 

    foreach (var pictureNode in pictureNodes) 
    { 
     var node = uQuery.GetNode(Convert.ToInt32(pictureNode)); 
     var photoId = node.GetProperty("picture").Value; 
     var photo = uQuery.GetMedia(Convert.ToInt32(photoId)); 
     var crop = photo.GetImageCropperUrl("imageCropper", "wide"); 
     <li><a rel="photos" href="@crop" title="@node.GetProperty("title").Value"> 
     <img src="@crop" height="150px" width="150px" class="shadow hovershadow"></a></li> 
    } 
    } 
    else 
    { 
    <li>Pictures coming soon!</li> 
    } 
} 

Le code n'a pas beaucoup changé, mais apparemment lors de l'exécution de la macro avant, je devais une erreur quelque part. Peu importe ce que j'ai fait pour changer le script, l'erreur a persisté. Il s'avère que le cache Razor d'Umbraco est trop agressif ou a un bug, donc le cache n'était pas invalidé quand une modification a été apportée au script. Pour contourner ce problème, j'ai dû recycler le pool d'applications dans IIS. Tout fonctionne maintenant.

+0

Si j'ai des problèmes de cache, je fais un clic droit sur le nœud racine du contenu et clique sur "republier le site entier". S'il s'agit d'un véritable problème de mise en cache, supprimez le fichier App_Data/umbraco.config et cliquez sur n'importe quelle page du site. Le fichier cache sera reconstruit. – dampee

Questions connexes