通过表达式设置值时不显示SSRS外部图像

Bil*_*ill 11 c# asp.net webforms rdl reporting-services

Microsoft.ReportViewer.WebForms通过嵌入在MVC应用程序中的aspx页面使用版本11。该报告可直接从报告查看器中以PDF格式呈现。

问题

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

我从呈现报告时得到以下警告:

图片“ LinkedImage”的ImageData无效。详细信息:无效的URI:无法确定URI的格式。

图像“ LinkedImage”的ImageData属性的值为“”,这不是有效的ImageData。

我尝试过的

  1. 我已经仔细检查了生成的URL,它是正确的。我什至使点击动作成为了指向图像的超链接,它可以正确地转到图像。

  2. 最初,我是在表达式中连接URL,但此操作不起作用后,我让SQL Query构建了整个URL。它仍然不显示。

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

    reportViewer.LocalReport.EnableExternalImages = true;
    
    Run Code Online (Sandbox Code Playgroud)
  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)>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 我尝试将MIMEType值设置为每个图像的正确值。(感谢迈克·霍尼的建议)

  7. 我尝试了AutoSizeFitFitProportionalClip的不同大小调整值。

  8. 我在这里使用安装程序修复并完全重新安装了ReportViewer运行时安装程序:https : //www.microsoft.com/zh-CN/g/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>
Run Code Online (Sandbox Code Playgroud)

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

http://---------/images/FEE40608-0457-E511-A17F-00155D145C00/FFE40608-0457-E511-A17F-00155D145C00.jpg
Run Code Online (Sandbox Code Playgroud)

我想念什么吗?谢谢!

Bil*_*ill 3

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

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

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