Jan*_*aek 5 c# string umbraco razor
我使用一种简单的方法来输出图像,如果媒体类型附加了链接,它将充当链接.这种方法已经工作了几个月和几个月,但突然有一位客户抱怨它不能正常工作.
我的剃刀宏整体看起来像这样:
@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>
}
}
Run Code Online (Sandbox Code Playgroud)
它会产生以下两个错误:
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
Run Code Online (Sandbox Code Playgroud)
和
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)
Run Code Online (Sandbox Code Playgroud)
我怀疑图像本身是原因的根源,但媒体形象绝对是应有的,我看不出任何区别.并且为了增加奇怪的因素 - 宏可以与任何其他图像完美配合.失败的图像可以在这里找到
编辑:
出于一些奇怪的原因,如果我GetType()
按照道格拉斯的建议对图像进行处理,并返回一个Umbraco.MacroEngines.DynamicXml
对象,其中任何其他图像上的对象返回一个字符串.它只是继续变得更奇怪和更奇怪.
第二次编辑:
我决定抛出代码并使用Kevin Hendricks建议的技术重写整个代码.现在突然间,我没有错误,它完全正常.唯一的区别是.ToString()
几个地方.
这听起来很愚蠢,但您可能希望将var linkId转换为字符串.如果由于某种原因,泛型var对象将其视为整数,Uri或者不同,那么这些问题就会出现
var topImage = Library.MediaById(topImageId);
var linkId = topImage._link;
if (!string.IsNullOrEmpty(linkId.ToString()))
{
}
Run Code Online (Sandbox Code Playgroud)
身高:
var topImage = Library.MediaById(topImageId);
string linkId = topImage._link.ToString();
if (!string.IsNullOrEmpty(linkId))
{
}
Run Code Online (Sandbox Code Playgroud)