SSRS 中的 JavaScript 无法正确处理数字符号

标签 javascript reporting-services ssrs-2008 ssrs-2008-r2

我正在 SSRS 中使用一些 JavaScript 代码在报表的新窗口中打开链接。报告链接指向服务器上的文件位置。我在 Reporting Services 中使用的链接代码是:

="javascript:void(window.open('"+ "file:" & Replace(Fields!FilePath.Value,"\","/") + "','_blank'))"

当文件名是“正常”的名称时,此代码可以正常工作,例如:

\\myserver\images\Files\1969\1-000-002_SE 82ND AVE 1_1969.pdf

但是,当存在特殊字符(至少是#)时,我会收到一条错误消息。这就是发生的事情。文件名示例如下:

\\myserver\images\Files\1978\1-001-003_SE 82nd AVE #12 1_1978.pdf

在这种情况下,返回的 URL 是:

\\myserver\images\Files\1978\1-001-003_SE 82nd AVE 

可以看出,URL 在第一个数字符号处被切断。如果我复制有问题的链接的快捷方式,这就是我得到的:

javascript:void(window.open('file://myserver/images/Files/1978/1-001-003_SE%2082nd%AVE%20#12%201_1978.pdf','_blank'))

JavaScript 似乎正确编码了文件路径,但 JavaScript 代码和 URL 之间的转换过程中有些内容丢失了。

我无法更改文件名,因此我需要想出一种使用特殊字符的方法。我尝试过使用 EncodeURI() 但无法弄清楚如何在 SSRS 中正确格式化它以与现有的 JavaScript 一起使用。

欢迎任何想法。

最佳答案

URL 将识别 HTML 字符编号。因此,在 JavaScript 之外,对您希望找到的每个特殊字符使用 SSRS 替换函数,将每个特殊字符替换为其相应的 HTML 数字代码。例如,井号是 %23;空格为 %20。

请注意,我有一些页面使用井号来分割 URL 参数,而这在这些情况下似乎不起作用。但是,它可能适合您的情况。要尝试此操作,请将您的函数更改为以下内容:

="javascript:void(window.open('"+ "file:" & Replace(Replace(Fields!FilePath.Value,"\","/"),"#","%23") + "','_blank'))"

如果这对您有用,您可以找到更多这些代码 here .

关于SSRS 中的 JavaScript 无法正确处理数字符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121443/

相关文章:

javascript - ToggleFade 一个带有显示的元素 :none?

javascript - 为什么此代码无法从 HTML 文本框中获取文本并将其显示在段落中?

c# - 使用 asp.net 将参数传递给 SSRS 报告过滤器下拉列表

security - 以编程方式获取 SSRS 2008 中的用户角色和权限

reporting-services - 在 SSRS 2008 中显示多值参数的占位符

reporting-services - 如何隐藏 tablix 行,tablix 内的 tablix,基于嵌套 tablix 的 (CountRows() = 0)

reporting-services - 在 SSRS 中隐藏子报告(并且不执行存储过程)

javascript - 使用 uib-tab 将鼠标悬停在选项卡上时显示工具提示?

javascript - 按顺序组合数组 JavaScript

oracle - VS2008 SSRS 用于查询 Oracle : How do I stop {oj} for outer Joins?