0

我有一个 XSLT 宏,它在循环中呈现一些标记和 .NET 用户控件宏。这就是 xslt 宏中的多个用户控件宏:

<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 宏 - 工作正常!这是不可能的,还是我做错了什么?

4

1 回答 1

2

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

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

于 2012-07-11T13:11:44.900 回答