ReportViewer 2010无法评估表达式
我的项目是ASP.Net 4.0框架上的WebForms,使用ReportViewer 10,使用本地处理模式呈现的本地RDLC报告。ReportViewer 2010无法评估表达式
我的问题是,我的报告中的许多表达式都没有评估。例如,我在报告的页脚中有一个文本框,其表达式为=Globals!PageNumber
- 但是当报告运行时,我只是在该字段中出现#Error。我收到一个类似的#Error,只是在我的一个字段上做了一个ToString - =Fields!MyBooleanField.Value.ToString()
。
也在我的页脚,=DateTime.Now
能工作,而=Globals!ExecutionTime
不起作用。
这对我来说没有意义 - 就好像我错过了一个参考或其他东西。我在我的项目中引用了Microsoft.ReportViewer.Common(v10)和Microsoft.ReportViewer.WebForms(v10)。
任何人有任何建议,我失踪了什么,或者我如何得到这个解决?
我看到三个选项:
选项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>
这可以防止您使用动态变量(在某些或所有情况下?)。特别是,因为ViewBag是动态的,所以不能使用Asp.Net MVC 3。
更多信息
http://blogs.msdn.com/b/brianhartman/archive/2010/02/18/expression-evaluation-in-local-mode.aspx
该问题是由于框架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
你的设置和行为听起来正确 - 你可以预览在投标或报表生成器2.0的报告?这是否只发生在WebForms ReportViewer控件中? – 2011-09-24 03:34:57