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