.NET usercontrol代码未在XSLT Umbraco宏内部呈现

.NET usercontrol代码未在XSLT Umbraco宏内部呈现,xslt,user-controls,umbraco,Xslt,User Controls,Umbraco,我有一个XSLT宏,它在循环中呈现一些标记和.NET usercontrol宏。这就是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;

我有一个XSLT宏,它在循环中呈现一些标记和.NET usercontrol宏。这就是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> 
和代码隐藏:

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 />");
}
public int NodeId{get;set;}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(IsPostBack)返回;
var tools=新工具();
var userId=(Int32)Membership.GetUser().ProviderUserKey;
Tag.Visible=tools.GetLog(NodeId,userId);
响应。写入(“Node=“+NodeId+”-User=“+userId+”
); }

Response.Write或Tag.Visible都不工作。我已经试着直接在空白的屏幕上测试usercontrol宏-效果很好!这是不可能的,还是我做错了什么?

不幸的是,由于XSLT宏的性质以及在页面生命周期中调用呈现事件的位置,这意味着library.rendermacontent()方法在XSLT内部无法工作

这里讨论了一个用于创建“小部件”功能的变通方法,如果这是您想要的。这使用ASP.NET中继器,在页面周期的正确阶段注入usercontrol,以允许usercontrol宏工作。否则,请使用Umbraco 4.7及更高版本中的宏容器数据类型,该数据类型允许在Umbraco backoffice中使用宏的拖放功能,并且可以使用
标记成功呈现(usercontrols、Razor或XSLT)

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 />");
}