0

いくつかのマークアップと .NET ユーザー コントロール マクロをループでレンダリングする XSLT マクロがあります。つまり、xslt マクロ内に複数の usercontrol マクロがあります。

<xsl:for-each select="$node/* [@isDoc]">
//Some markup etc...
  <xsl:value-of select="umbraco.library:RenderMacroContent('&lt;?UMBRACO_MACRO NodeId=&quot;@id&quot; macroAlias=&quot;LogTag&quot;&gt;&lt;/?UMBRACO_MACRO&gt;', @id)" disable-output-escaping="yes"/>
</xsl:for-each> 

usercontrols マークアップからのマークアップは問題なくレンダリングされますが、内のすべてがPage_load実行されません。何故ですか?

ユーザーコントロールのマークアップは次のとおりです。

<div class="logTag" id="Tag" runat="server">
      <img src="someimage.png" alt="image"/>
</div>

コードビハインド:

public int NodeId { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)return;

    var tools = new Tools();
    var userId = (Int32)Membership.GetUser().ProviderUserKey;
    Tag.Visible = tools.GetLog(NodeId, userId);
    Response.Write("Node=" + NodeId + " - User=" + userId + "<br />");
}

Response.Write も Tag.Visible も機能していません。ユーザーコントロールマクロを空白で直接テストしてみました-正常に動作します! これは不可能ですか、それとも何か間違っていますか?

4

1 に答える 1

2

残念ながら、XSLT マクロの性質と、ページ ライフサイクルで render イベントが呼び出される場所により、library.RenderMacroContent() メソッドは XSLT 内では機能しません。

Hendy Racher のブログで、「ウィジェット」機能を作成するために使用される回避策が議論されています。これは、ページ サイクルの正しい段階でユーザー コントロールを挿入する ASP.NET リピーターを利用して、ユーザー コントロール マクロが動作できるようにします。それ以外の場合は、Umbraco 4.7 以降でマクロ コンテナー データ型を使用します。これにより、Umbraco バックオフィス内のマクロのドラッグ アンド ドロップ機能が可能になり、<umbraco:Item />タグを使用して (ユーザー コントロール、Razor、または XSLT) 正常にレンダリングできます。

于 2012-07-11T13:11:44.900 に答える