我正在关注此链接 http://spyralout.com/2009/03/16/current-page-url-using-xsl-for-content-query-web-part/
我想在我的页面上显示查询字符串值。为此,我在stackoverflow上看到了一个解决方案,我觉得有点复杂。所以我的方法是:
1)获取当前网址
2)在该url上使用substring-after获取查询字符串的值..
我可以用一些例子来解释这个......
我的网页网址是www.stackoverflow.com/questions.aspx?display=18 ..我想在我的网页上显示18 ...
到目前为止我做了什么......
1)我在xslt中添加了命名空间 的xmlns:DDWRT = “http://schemas.microsoft.com/WebParts/v2/DataView/runtime”
2)添加了参数
<xsl:param name=”PageUrl” />
3)在变量
中添加了这个值 <xsl:variable name=”DetailPageLink” select=”$PageUrl” />
4)现在当我尝试在substring-after中使用它时,它没有显示任何值......?
<xsl:value-of select="substring-after($DetailPageLink,'=')" />
5)我也试过
<xsl:value-of select="$DetailPageLink" />
但它没有给出任何价值..?
知道我哪里错了......
再次感谢Dimitre回答它......但问题仍然存在......正如我所说,我不想将url传递给全局参数..我希望它是动态的......回答你的问题..我不知道它背后的逻辑......我认为它是因为我使用过的这个名称空间.... PageUrl获取当前页面的URL ....但是当我在尝试时
xsl:copy-of select =“$ DetailPageLink”/&gt;或
xsl:value-of select =“$ DetailPageLink”/&gt;或
xsl:value-of select =“substring-after($ DetailPageLink,'=')”/&gt; ...
它没有显示任何输出......但有趣的是它在我使用时显示页面网址
a href =“{$ DetailPageLink}”&gt;杰克 / A&GT;
这意味着PageUrl正在获取值....否则标签不应该显示任何输出......
如果您知道获取当前页面网址的任何其他方法,请告诉我....
答案 0 :(得分:1)
1)我在xslt中添加了命名空间 的xmlns:DDWRT = “http://schemas.microsoft.com/WebParts/v2/DataView/runtime”
这不是必需的。
2)添加了参数
xsl:param name =“PageUrl”/&gt;
3)在变量
中添加了这个值
<xsl:variable name=”DetailPageLink” select=”$PageUrl” />
4)现在当我尝试在substring-after中使用它时,它不是 显示任何值......?
<xsl:value-of select="substring-after($DetailPageLink,'=')" />
5)我也试过
<xsl:value-of select="$DetailPageLink" />
但它没有给予任何 值..?知道我哪里错了......
上面的事实清楚地表明全局参数$PageUrl
要么没有初始化,要么无论如何,它的字符串值是空字符串。
解决方案:
您需要在启动转换之前使用适当的字符串值 设置全局参数$PageUrl
。您也可以在全局select
的{{1}}属性中为其指定默认值,如果选择了默认值,则证明该参数未被XSLT转换的发起者初始化并传递/
以下是正确的XSLT代码,它使用默认值xsl:param
或在启动转换时为此全局参数提供的值:
$PageUrl
当对任何XML文档(未使用)应用此转换时,会生成所需的正确结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pPageUrl" select=
"'www.stackoverflow.com/questions.aspx?display=18&somethingElse=xyz'"/>
<xsl:template match="/t">
<xsl:variable name="vQSPart" select=
"concat('&', substring-after($pPageUrl,'?'),'&')"/>
<xsl:value-of select=
"substring-before
(substring-after($vQSPart, '&display='),
'&')
"/>
</xsl:template>
</xsl:stylesheet>
当我将转换的 的值设置为:18
后,再次执行转换,我再次得到正确的结果:
'www.stackoverflow.com/questions.aspx?something=abcd&display=123&somethingElse=xyz'
答案 1 :(得分:1)
这里的问题是参数:
xsl:param name="PageUrl"
实际上并不适用于网页。即使您确实添加了ParameterBinding行(如上所述)。它出现在SP Designer中工作,但是当通过浏览器查看时,PageUrl参数返回空值或Null值。用于返回当前页面URL的正确参数是ServerVariable参数。所以像这样设置ParemeterBinding(你需要添加自己的尖括号,因为如果我输入它,这个网站将不喜欢它):
ParameterBinding Name="PageAddr" Location="ServerVariable(URL)" DefaultValue=""/
PageAddr只是我分配给参数的随机名称,不会与PageUrl混淆。接下来调用StyleSheet中的Parameter,如下所示:
xsl:param name="PageAddr" /
现在,您可以使用$ PageAddr在XSLT代码中的任何位置调用参数。
警告此参数在SP Designer中不起作用,但可在浏览器中使用。
[有谁知道为什么微软认为在SPD中有一个参数工作而在浏览器中另一个工作是个好主意?]
答案 2 :(得分:0)
我认为显示QueryString信息的最简单方法是使用ParameterBinding:
在ParameterBindings中添加:
<ParameterBinding Name="subsiteLink" Location="ServerVariable(PATH_INFO)" DefaultValue=""/>
在DataView的XSL样式表中添加:
<xsl:param name="subsiteLink"></xsl:param>
path_info: <xsl:value-of select="$subsiteLink"/><br/>
这是显示数据的简化方法。
答案 3 :(得分:0)
要初始化全局变量“PathUrl”,您必须:
1)将以下行添加到ParameterBindings
中<ParameterBinding Name="PageUrl" Location="ServerVariable(QUERY_STRING)" DefaultValue=""/>
2)在ParameterBindings
之后,将以下行添加到xsl:stylesheet中<xsl:param name="PageUrl"></xsl:param>
3)现在您可以使用以下行显示URL参数
<xsl:value-of select="$PageUrl"/>
对于其他服务器变量,您可以访问http://joshmccarty.com/2012/06/using-asp-net-servervariables-in-a-sharepoint-data-view-web-part/
问候:)