我有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。
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/tf741884.aspx处的文档清楚地说明了“使用params关键字定义的任何方法,允许传递未指定数量的参数,XslCompiledTransform类目前不支持这种方法。”所以不支持你想要的东西。根据您的需要,您可以考虑是否可以使用纯XSLT 2.0和其中一个.NET XSLT 2.0处理器(如Saxon 9或XQSharp)来实现该功能。 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'), '')"/>