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。
我尝试过的
我已经仔细检查了生成的URL,它是正确的。我什至使点击动作成为了指向图像的超链接,它可以正确地转到图像。
最初,我是在表达式中连接URL,但此操作不起作用后,我让SQL Query构建了整个URL。它仍然不显示。
我尝试设置一个标志:
reportViewer.LocalReport.EnableExternalImages = true;
Run Code Online (Sandbox Code Playgroud)使用.NET Reflector生成PDB文件,我能够逐步浏览报告查看器的代码。在值对象上有一个名为“ IsExpression”的标志,在报表呈现时将其设置为false。我不太了解报表查看器的内部工作原理,因此不知道这是不是一个红鲱鱼。
我已将输出格式更改为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)我尝试将MIMEType值设置为每个图像的正确值。(感谢迈克·霍尼的建议)
我尝试了AutoSize,Fit,FitProportional和Clip的不同大小调整值。
我在这里使用安装程序修复并完全重新安装了ReportViewer运行时安装程序:https : //www.microsoft.com/zh-CN/g/download/details.aspx? id =35747
我已经从本地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)
我想念什么吗?谢谢!
我终于弄清楚了。事实证明,此问题是由ReportProcessor
添加到 MVC 应用程序中的定制类引起的,该类在渲染发生之前就操纵 RDL。具体来说,它=
从 RDL 中图像节点的值节点中删除字符。我没有想到该报告没有以其原始状态进入渲染阶段。我会用我所付出的声望来偿还这个代价!
这个问题对于那些引入了不同的 ReportProcessor 以这种方式操作 RDL 的人来说是独一无二的,所以我不知道它对于在 SO 上发现这个问题的人来说有多大用处。我将把它留在这里,因为它可以用作要检查的事项列表。
抱歉浪费了大家的时间。感谢 Mike-Honey、user1429080 和 AndrewE 付出的时间和精力。