【问题标题】:ReportViewer 2010 fails to evaluate expressionsReportViewer 2010 无法评估表达式
【发布时间】:2016-04-29 21:20:27
【问题描述】:

我的项目是 ASP.Net WebForms on 4.0 framework,使用 ReportViewer 10,本地 RDLC 报告使用 Local 处理模式呈现。

我的问题是我的报告中的许多表达式都没有进行评估。例如,我在报告的页脚中有一个文本框,其简单表达式为=Globals!PageNumber - 但是当报告运行时,我只是在该字段中得到#Error。我得到一个类似的#Error,只是在我的一个字段上执行 ToString - =Fields!MyBooleanField.Value.ToString()

在我的页脚中,=DateTime.Now 可以工作,而=Globals!ExecutionTime 不能工作。

这对我来说毫无意义 - 就好像我缺少参考或其他东西。我的项目中引用了 Microsoft.ReportViewer.Common (v10) 和 Microsoft.ReportViewer.WebForms (v10)。

有人对我缺少什么或如何解决此问题有任何建议吗?

【问题讨论】:

  • 您的设置和行为听起来正确 - 您可以在 BIDS 或 Report Builder 2.0 中预览报告吗?这只发生在 WebForms ReportViewer 控件中吗?

标签: .net asp.net reportviewer


【解决方案1】:

我见过三个选项:

选项 1:提升沙盒权限

表达式被编译成单独的程序集并在具有较少权限的沙箱中运行。使用它来增加授予沙箱的权限。您可能可以授予较小的权限集,我们只是没有花时间解决这个问题。这意味着报表及其引用的任何程序集都将具有提升的权限。尽管我们尚未部署到生产环境,但此解决方案对我们有用(MVC 3、.Net 4、VS2010、Microsoft.Reporting v10)。

localReport.SetBasePermissionsForSandboxAppDomain(
    AppDomain.CurrentDomain.PermissionSet.Copy());

选项 2:基于 .Net 3.5 框架构建

在 .Net 3.5 下编译您的项目

选项 3:legacyCasModel

将此添加到您的 web.config:

<system.web>
  <trust legacyCasModel="true" level="Full"/>
</system.web>

这会阻止您使用动态变量(在某些或所有情况下?)。特别是,Asp.Net MVC 3 不能使用,因为 ViewBag 是动态的。

更多信息

http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/be1a6149-a120-4e66-96f8-63f5c4d43c87

http://blogs.msdn.com/b/brianhartman/archive/2010/02/18/expression-evaluation-in-local-mode.aspx

【讨论】:

    【解决方案2】:

    此问题是由于框架 4.0 中的一些 CAS 政策更改造成的。 请在 web.config 中添加以下行:

    <trust legacyCasModel="true" level="Full"/>
    

    &lt;system.web&gt; 部分

    参考以下链接:

    http://blogs.msdn.com/b/brianhartman/archive/2010/02/18/expression-evaluation-in-local-mode.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2015-01-17
      • 2018-10-20
      相关资源
      最近更新 更多