I am using a simple method to output a image, and if the media type has a link attached to it, it will act as a link. This method has been working for months and months, but suddenly a customer complained over it not working.
My razor macro in its entirety looks like this:
@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>
}
}
and it produces these two errors:
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
and
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)
I suspected the image itself to be the root of the cause, but the media image is absolutely as it should be and I cant see any difference. And to add to the weird-factor – the macro works just perfect with any other image. The image that fails can be found here
EDIT:
For some odd reason, if I do GetType() on the image as Douglas suggested, and it returns a Umbraco.MacroEngines.DynamicXml object, where it on any other image returns a string. It just keep on getting weirder and weirder.
SECOND EDIT:
I decided to throw the code out and rewrite the entire thing using the technique Kevin Hendricks suggested. Now all of a sudden, I get no errors and it works just perfectly. Only difference is a couple of .ToString() a couple of places.
It sounds stupid but you might want to convert the var linkId to a string. If for some reason the generic var object sees it as an integer, Uri or different, than problems like these will arrise
Prefer: