c# - 当表达式设置值时不显示 SSRS 外部图像

标签 c# asp.net reporting-services webforms rdl

我通过嵌入在 MVC 应用程序中的 aspx 页面使用 Microsoft.ReportViewer.WebForms 版本 11。报表直接从报表查看器呈现为 PDF。

问题

我有一个显示外部图像的 tablix。如果图像的 URL 是根据表达式计算的或根据数据库中的列设置的,则图像不会显示。只有当我直接在报告中对 URL 进行硬编码时,图像才会显示。显然这不是解决方案,但它表明报表能够访问 URL 并呈现图像。

我从呈现报告中得到这些警告:

The ImageData for the image ‘LinkedImage’ is invalid. Details: Invalid URI: The format of the URI could not be determined.

The value of the ImageData property for the image ‘LinkedImage’ is “”, which is not a valid ImageData.

我尝试过的

  1. 我仔细检查了生成的 URL,它是正确的。我什至将点击操作设为图像的超链接,它会正确转到图像。

  2. 最初我在表达式中连接 URL,但在这不起作用之后我让 SQL 查询构建了整个 URL。它仍然没有显示。

  3. 我试过设置一个标志:

    reportViewer.LocalReport.EnableExternalImages = true;
    
  4. 使用 .NET Reflector 生成 PDB 文件,我能够单步执行报表查看器的代码。值对象上有一个名为“IsExpression”的标志,当报告呈现时它被设置为 false。我不太了解报告查看器的内部工作原理,所以我不知道这是否是一个转移注意力的问题。

  5. 我已将输出格式更改为 HTML,但它仍然不显示。图像标记(如 Chrome 开发者工具中所示)呈现为:

    <img onload="this.fitproportional=true;this.pv=0;this.ph=0;" height="5px" width="1px" src=(unknown)>
    
  6. 我已尝试将每个图像的 MIMEType 值设置为正确的值。 (感谢 Mike Honey 的建议)

  7. 我尝试了 AutoSizeFitFitProportional 的不同Sizing 值em>剪辑

  8. 我使用此处的安装程序完全修复并重新安装了 ReportViewer 运行时安装:https://www.microsoft.com/en-gb/download/details.aspx?id=35747

  9. 我已从我的本地 Visual Studio 实例运行该网站,并在另一台服务器上的网站中部署了一个版本(相同安装的 ReportViewer 版本),但问题仍然存在。

我想提请注意第 4 点。是否存在导致 ReportViewer 代码无法将值视为表达式的配置?

代码

这是 RDL 中的标记:

<Image Name="LinkedImage">
    <Source>External</Source>
    <Value>=Fields!imageUrl.Value</Value>
    <Sizing>FitProportional</Sizing>                               
    <Style>
        <Border>
            <Style>None</Style>
        </Border>
    </Style>
</Image>

这是一个示例 URL(从示例中删除了主机):

http://---------/images/FEE40608-0457-E511-A17F-00155D145C00/FFE40608-0457-E511-A17F-00155D145C00.jpg

我错过了什么吗?谢谢!

最佳答案

我终于弄明白了。这个问题原来是由定制的 ReportProcessor 类引起的,该类已添加到 MVC 应用程序中,该应用程序甚至在渲染发生之前就对 RDL 进行了操作。具体来说,它从 RDL 中图像节点的值节点中删除 = 字符。我没有想到报告没有以其原始状态进入渲染阶段。我会用我花费的声望来付出代价!

这个问题对于引入不同的 ReportProcessor 以这种方式操作 RDL 的人来说是独一无二的,所以我不知道它对在 SO 上发现这个问题的人有多大用处。我会把它留在这里,因为它可以用作要检查的事项列表。

抱歉浪费了大家的时间。感谢 Mike-Honey、user1429080 和 AndrewE 付出的时间和精力。

关于c# - 当表达式设置值时不显示 SSRS 外部图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56288884/

相关文章:

reporting - 为什么 "PageBreakAtEnd = True"在我的报告中不起作用?

c# - 在 ASP.NET 事件处理程序中使用 async/await 是否安全?

c# - 关于 if 语句的更短代码

c# - 具有自定义数据的ListView

c# - asp 中继器复选框状态保留

c# - 在文本框中输入字符时显示 div 标签内容?

reporting-services - 通过 URL 的 SSRS 传递参数

c# - 在 WPF 应用程序中显示网页的某些部分的方法

c# - PowerShell Types.ps1xml 导入模块时找不到类型

ssrs-2008 - 检查字段值是否在 SSRS 报告中的字符串列表中