我一直在开发MVC3应用,最近的要求是它必须具有几个动态生成的报告。因此,我添加了一个带有reportviewer和几个报告(.rdlc)的webbform。但是当我尝试设置条件行填充时

=IIf(RowNumber(Nothing) Mod 2, "Blue", "Red") // Won't acctually use those colors but you get the gist


但是最终的背景仍然是白色的。
我在一个真正的蓝色Webform应用程序中试用了完全相同的Webform,并从那里正确呈现了该Webform。我检查了我的MVC项目是否包含在Webforms测试项目中使用的每个引用,并将.aspx和.rdlc添加到了Global.asax.cs中被忽略的路由。

为什么是混合恐怖?
由于性能原因,我无法从“客户端报告”生成更改为“服务器端”,也无法使用其他/远程服务器,因为环境(是复数)缺乏带宽和连接性。而且,我不想不必仅为reportviewer添加单独的应用程序池(再次出现性能问题)。

编辑1:

Global.asax

public class MvcApplication : System.Web.HttpApplication {
    public static void RegisterGlobalFilters ( GlobalFilterCollection filters ) {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes ( RouteCollection routes ) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.rdlc/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

    protected void Application_Start () {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
}


Report.aspx
    ....
    

</rsweb:ReportViewer>
<asp:XmlDataSource ID="reportsDS" runat="server"
        DataFile="~/Reporting/ReportSettings/Reportlist.xml"
        XPath="Reports/Report" />
<asp:ScriptManager ID="scriptmanager" runat="server" />
....


Report.aspx.cs

// Some configuration initialization and the regular Page_Init + Page_Load assigning
// default values

protected void changeReport() {
    ReportViewer.Reset();
    ReportDataSource RDS = new ReportDataSource( /* grabbed from a combination of applicationsettings and input parameters */
    ReportViewer.LocalReport./* adding datasource and setting paths, names, etc. */
}


编辑2:
添加了代码以更好地了解正在执行的操作,但是看到该代码在从Webforms项目发布时可以正常工作,我猜测ReportViewer会执行某些Blackmagic请求,而Global.asax并不特别喜欢它。但是,尽管我尽了最大的萤火虫努力,但我仍然找不到这种魔术品牌。

最佳答案

我设法通过修改Page_Init解决了这个问题

protected void Page_Init( object sender, EventArgs e ) {
    ...
    ReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted));
    ...
}


感觉就像是骇客,所以在接受这个答案之前,我将待一两天

10-08 07:20