显示页面URL SharePoint xslt

时间:2011-09-11 15:27:29

标签: xslt sharepoint-2010

我正在关注此链接 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正在获取值....否则标签不应该显示任何输出......

如果您知道获取当前页面网址的任何其他方法,请告诉我....

4 个答案:

答案 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&amp;somethingElse=xyz'"/>

 <xsl:template match="/t">
  <xsl:variable name="vQSPart" select=
  "concat('&amp;', substring-after($pPageUrl,'?'),'&amp;')"/>

  <xsl:value-of select=
    "substring-before
        (substring-after($vQSPart, '&amp;display='),
         '&amp;')
    "/>
 </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/

问候:)