将用户控件.ascx包含到xslt中

时间:2013-10-08 06:25:09

标签: xslt user-controls sitecore ascx

我创建了.ascx用户控件,我正试图找到一种将它包含在xslt渲染中的方法。我怎样才能做到这一点?我正在为Sitecore做这件事。我想可能会创建一个占位符,但不能在渲染中定义占位符。感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

无法将ASCX文件包含到xslt文件中,因为:XSLT将XML转换为HTML或XML或纯文本,而不是ASP.NET页面。

您可以将xslt文件包含到ascx中,但不能将ascx包含到xslt文件中。最好的方法是将xslt文件更改为ascx文件,并在其中包含占位符或直接包含。 我建议避免使用XSLT。

它们看起来很容易使用,但重构代码真的很难。

答案 1 :(得分:1)

嗯,直接从XSLT文件调用用户控件(.ascx)是不可能的。但是,根据您想要实现的目标,您可以从XSLT文件中调用.net方法,称为XSLT扩展方法。例如,您可能需要编写类似于下面的代码来调用自定义.Net GetData()方法。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:customObject="urn:yourNamespace">
    <new-data>
              <xsl:value-of select="customObject:GetData()"/>        
    </new-data>
...

当然,在使用之前需要注册类型。类型注册可以在web.config中完成,也可以通过调用 XSLTArgumentList 类的 AddExtensionObjectMethod 来动态完成。

Sitecore也提供XSLT扩展控件,与扩展方法不同,它不是.net功能。 XSL扩展控件是XSL渲染中与.NET类对应的XML元素。例如,XSL扩展控件对应于 Sitecore.Web.UI.XslControls.Text .NET类。它将在XSLT文件中使用类似的东西: 的

XSL扩展控件是XSL代码中的独立元素。

要注册自定义类型,请将以下内容添加到web.config中的 元素:

<extension mode="on" type="NamespaceName.ClassName, AssemblyName" namespace="http://www.w3.org/1999/XSL/Transform" singleInstance="true"/>

参考:http://sdn.sitecore.net/upload/sitecore6/64/presentation_component_xsl_reference_sc62-64-a4.pdf