【问题标题】:Include user control .ascx into xslt将用户控件 .ascx 包含到 xslt
【发布时间】:2013-10-08 06:25:08
【问题描述】:

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

【问题讨论】:

    标签: xslt user-controls sitecore ascx


    【解决方案1】:

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

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

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

    【讨论】:

    • 我同意这一点。此外,在进行 XSLT 时,您不可避免地最终需要做一些使用 XSLT 不容易实现的事情,并且不得不求助于 ASCX 和/或“助手”。最好还是坚持使用 ASCX 和代码。
    • 无论如何,我想有一个解决方案可以将 ascx 添加到 xslt 中,关于自定义 XSL 扩展控件。我在这篇文章中找到了一些关于 sc:sublayout 的信息:groups.yahoo.com/neo/groups/sitecore/conversations/topics/2929
    • 如果您发现对 ascx 控件(事件、视图状态等)的全部功能都有效的东西,请与我们分享,但我 99% 确定它不起作用。
    【解决方案2】:

    嗯,直接从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多