C#XSLT帮助程序与params

时间:2011-04-28 11:31:09

标签: c# xslt params view-helpers

我有xsl视图引擎,想要从xsl调用标准视图助手(例如UrlHelper.Action)。但是我没有将变量nems of params传递给辅助方法。

助手类:

namespace Services
{
    public class ViewHelper
    {
        // ...

        public string DummyHelper(params string[] dummyArgs)
        {
            return String.Concat(dummyArgs);
        }
    }
}

为xsl转换添加帮助支持:

var xsl = new XslCompiledTransform();
xsl.Load('MyView.xsl');
varc xsltArgs = new XsltArgumentList();
// Create helper, pass controller context as a param
var helper = new Services.ViewHelper(context));
xslt.AddExtensionObject("urn:helper", helper);
xsl.Transform(xmlDocument, xsltArgs, output);

使用帮助程序的xsl脚本之一:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:h ="urn:helper"
    exclude-result-prefixes="h msxsl"
>
    <xsl:template match="/">
        <xsl:value-of select="h:DummyHelper('lorem', 'ipsum', 'dolor', 'sit', 'amet')"/>
    </xsl:template>
</xsl:stylesheet>

异常引发的消息说:找不到带有5个参数的mthod DummyHelper。

1 个答案:

答案 0 :(得分:1)

http://msdn.microsoft.com/en-us/library/tf741884.aspx处的文档清楚地说明了“使用params关键字定义的任何方法,允许传递未指定数量的参数,XslCompiledTransform类目前不支持这种方法。”所以不支持你想要的东西。根据您的需要,您可以考虑是否可以使用纯XSLT 2.0和其中一个.NET XSLT 2.0处理器(如Saxon 9XQSharp)来实现该功能。 XSLT 2.0比XSLT 1.0强大得多,允许您在纯XSLT中使用xsl:function编写函数。对于您的样本,您可以简单地进行

<xsl:value-of select="'lorem', 'ipsum', 'dolor', 'sit', 'amet'" separator=""/>

在XSLT 2.0中或

<xsl:value-of select="string-join(('lorem', 'ipsum', 'dolor', 'sit', 'amet'), '')"/>