通过表达式

时间:2019-05-24 08:41:49

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

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

问题

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

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

  

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

     

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

我尝试过的事情

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

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

  • 我尝试设置一个标志:

    reportViewer.LocalReport.EnableExternalImages = true;
    
  • 使用.NET Reflector生成PDB文件,我能够逐步浏览报告查看器的代码。在值对象上有一个称为“ IsExpression”的标志,在呈现报表时将其设置为false。我对“报表”查看器的内部功能了解不多,所以不知道这是不是一个红鲱鱼。

  • 我已将输出格式更改为HTML,但仍不显示。图片标记(在Chrome开发者工具中可以看到)呈现为:

    <img onload="this.fitproportional=true;this.pv=0;this.ph=0;" height="5px" width="1px" src=(unknown)>
    

代码

这是RDL中的标记:

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

以下是示例网址(从示例中删除了主机):

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

我想念什么吗?谢谢!

2 个答案:

答案 0 :(得分:3)

我终于走到了尽头。事实证明,此问题是由定制的ReportProcessor类引起的,该类已添加到MVC应用程序中,该类甚至在渲染发生之前就操纵RDL。具体来说,它从RDL中“图像”节点的“值”节点中删除了=字符。在我看来,报告并没有进入原始状态。我会用我花的声誉来付出代价!

对于引入了以这种方式操纵RDL的其他ReportProcessor的人们来说,此问题将是唯一的,因此我不知道这对于人们在SO上发现此问题有多大用处。我将其保留在此处,因为它可以用作要检查的事情的列表。

很抱歉浪费大家的时间。感谢Mike-Honey,user1429080和AndrewE的时间和精力。

答案 1 :(得分:0)

在Image对象的属性中,我将检查 MIMEType 属性是否已正确设置,例如图片/ jpeg

我的理解是,在没有此信息的情况下,您的Web浏览器足够聪明,可以正确猜测,但是SSRS呈现引擎并不那么聪明。