J'utilise une méthode simple pour sortir une image, et si le type de média a un lien attaché, il agira comme un lien. Cette méthode a fonctionné pendant des mois et des mois, mais soudainement, un client s'est plaint que cela ne fonctionnait pas.Utilisation de string.IsNullOrEmpty sur une chaîne potentielle dans Razor dans Umbraco
Ma macro rasoir dans son ensemble ressemble à ceci:
@using umbraco.MacroEngines
@inherits umbraco.MacroEngines.DynamicNodeContext
@{
var topImageId = Model._topImage;
if (topImageId != null) {
var topImage = Library.MediaById(topImageId);
var linkId = topImage._link;
string cssStyle = string.Format("background-image:url({0});height:{1}px;", topImage.umbracoFile, topImage.umbracoHeight);
<div id="topImage"
@if(!string.IsNullOrEmpty(linkId)){
var tempNode = @Model.NodeById(linkId);
@Html.Raw(string.Format(" onclick=\"window.location.href='{0}'\"", @tempNode.Url));
cssStyle += " cursor: pointer;";
}
@Html.Raw(string.Format("style=\"{0}\"", cssStyle))
></div>
}
}
et produit ces deux erreurs:
Error Loading Razor Script (file: Top Image) The best overloaded method match for 'string.IsNullOrEmpty(string)' has some invalid arguments at CallSite.Target(Closure , CallSite , Type , Object)
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
at ASP._Page_macroScripts_general_topImage_cshtml.Execute() in d:\inetpub\wwwroot\friendtex.com\www\macroScripts\general\topImage.cshtml:line 15
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors)
at System.Web.WebPages.WebPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at umbraco.MacroEngines.RazorMacroEngine.ExecuteRazor(MacroModel macro, INode currentPage)
at umbraco.MacroEngines.RazorMacroEngine.Execute(MacroModel macro, INode currentPage) 0.741249 0.004230
et
Error loading MacroEngine script (file: /general/topImage.cshtml, Type: ''
The best overloaded method match for 'string.IsNullOrEmpty(string)' has some invalid arguments
at umbraco.macro.renderMacro(Hashtable pageElements, Int32 pageId)
Je me doutais bien l'image elle-même être la racine de la cause, mais l'image médiatique est absolument comme il se doit et je ne vois pas de différence. Et pour ajouter au facteur bizarre - la macro fonctionne parfaitement avec n'importe quelle autre image. L'image qui ne peut être found here
EDIT:
Pour une raison étrange, si je GetType()
sur l'image que Douglas a suggéré, et il retourne un objet Umbraco.MacroEngines.DynamicXml
, où sur une autre image renvoie une chaîne. Il continue juste à devenir plus étrange et plus étrange.
EDIT DEUXIÈME:
j'ai décidé de lancer le code à réécrire et toute la chose en utilisant la technique Kevin Hendricks a suggéré. Maintenant, tout d'un coup, je n'ai pas d'erreurs et ça fonctionne parfaitement. La seule différence est un couple de .ToString()
quelques endroits.
Y at-il une raison que vous utilisez « underscore » dans le nom de la propriété pour le lien? Vous vous rendez compte que cela recherchera récursivement un noeud auquel la propriété "link" est associée? Une chose que vous pouvez faire pour le dépannage est de sortir le type que le moteur de rasoir pense que la propriété est: '@ topImage._link.GetType()'. –
Non, je n'étais pas au courant de cela. Pour une raison quelconque, les traits de soulignement dans les noms de propriété semblent fonctionner lorsque 'getPropertyValue' ne le fait pas –