.NET usercontrol代码隐藏不在XSLT Umbraco宏中呈现

时间:2012-07-11 11:33:08

标签: xslt user-controls umbraco

我有一个XSLT宏,它在循环中呈现一些标记和.NET用户控制宏。这就是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都不起作用。我已经尝试直接在空白上测试usercontrol宏 - 工作正常!这是不可能的,还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

不幸的是,由于XSLT宏的性质以及在页面生命周期中调用render事件的位置意味着library.RenderMacroContent()方法在XSLT中不起作用。

Hendy Racher's blog上讨论了一种解决方法,用于创建“小部件”功能,如果这是您所追求的。这利用了一个ASP.NET转发器,它在页面周期的正确阶段注入用户控件,以允许用户控制宏工作。否则,请使用Umbraco 4.7及更高版本中的Macro Container数据类型,这允许在Umbraco后台内部执行宏的拖放功能,并且可以使用<umbraco:Item />标记成功呈现(usercontrols,Razor或XSLT)。