5

画像を出力する簡単な方法を使用しています。メディア タイプにリンクが添付されている場合は、リンクとして機能します。この方法は何ヶ月もの間うまくいっていましたが、突然、顧客がそれがうまくいかないと不満を言いました.

私の剃刀マクロ全体は次のようになります。

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

    }
}

次の 2 つのエラーが生成されます。

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

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)

原因は画像自体にあるのではないかと疑っていましたが、メディアの画像はまったく問題なく、違いがわかりません。そして奇妙な要因に加えて、マクロは他のどの画像でも完璧に機能します。失敗した画像はこちら

編集:

何らかの奇妙な理由で、GetType()ダグラスが提案したように画像に対して行うと、Umbraco.MacroEngines.DynamicXmlオブジェクトが返され、他の画像では文字列が返されます。ますます奇妙になり続けています。

2番目の編集:

私はコードを破棄し、Kevin Hendricks が提案した手法を使用して全体を書き直すことにしました。突然、エラーが発生せず、完全に機能するようになりました。唯一の違いは、いくつ.ToString()かの場所です。

4

1 に答える 1

9

ばかげているように聞こえますが、var linkId を文字列に変換したい場合があります。何らかの理由でジェネリック var オブジェクトがそれを整数、Uri、または異なるものとして認識した場合、このような問題が発生します。

var topImage = Library.MediaById(topImageId);
var linkId = topImage._link;
if (!string.IsNullOrEmpty(linkId.ToString()))
{

}

好む:

var topImage = Library.MediaById(topImageId); 
string linkId = topImage._link.ToString(); 
if (!string.IsNullOrEmpty(linkId)) 
{ 

}
于 2013-01-03T15:40:26.553 に答える