2012-07-11 82 views
0

我有一個宏觀的XSLT呈現一些標記和.net用戶控件宏在一個循環中渲染。所以,這就是多個用戶控件宏的XSLT宏中:.net用戶控件的代碼隱藏不是XSLT一把umbraco宏觀

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

從用戶控件標記的標記被渲染得很好,但不執行的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 />"); 
} 

無論是回覆於或Tag.Visible工作。我試着直接在空白處測試usercontrol宏 - 工作正常!這是不可能的,還是我做錯了什麼?

回答

2

不幸的是,由於XSLT宏的本質以及頁面生命週期中調用渲染事件的地方,這意味着library.RenderMacroContent()方法在XSLT中不起作用。

有上Hendy Racher's blog討論一個解決方法是用來打造「小工具」的功能,如果這是你所追求的。這利用了ASP.NET中繼器,它在頁面週期的正確階段注入用戶控件,以允許用戶控件宏工作。否則,使用在一把umbraco 4.7和向上宏容器數據類型,它允許一把umbraco後臺內部宏拖放功能,並且可以成功地呈現使用<umbraco:Item />標籤(用戶控件,剃刀或XSLT)。

+0

好了,感謝您的回答。說得通。 – 2012-07-11 15:51:57

相關問題