ReportViewer 2010无法评估表达式

时间:2011-06-14 16:51:11

标签: .net asp.net reportviewer

我的项目是基于4.0框架的ASP.Net WebForms,使用ReportViewer 10,使用本地处理模式呈现本地RDLC报告。

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

同样在我的页脚中,=DateTime.Now可以正常工作,而=Globals!ExecutionTime则不起作用。

这对我没有意义 - 就好像我错过了一个参考或其他东西。我的项目中引用了Microsoft.ReportViewer.Common(v10)和Microsoft.ReportViewer.WebForms(v10)。

任何人都有任何关于我缺少什么的建议,或者我如何解决这个问题?

2 个答案:

答案 0 :(得分:11)

我见过三种选择:

选项1:提升沙盒权限

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

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

选项2:在.Net 3.5 Framework上构建

在.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

答案 1 :(得分:1)

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

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

<system.web>部分

请参阅以下链接:

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