为什么我的Crystal Report和Viewer在MVC应用程序的Web窗体上不可见?

时间:2013-08-03 22:01:40

标签: asp.net-mvc crystal-reports webforms crystal-reports-2010

我正在将一个示例MVC 3应用程序中的代码复制到我的新MVC 4应用程序中。代码将报表参数设置为Session,即报表名称和报表数据,然后调用仅包含CrystalReportViewer的.aspx页面来显示报表:

public class ReportController : Controller
{
    public ActionResult Terminal()
    {
        Session["ReportName"] = "Terminal.rpt";
        using (var sqn = new SqlConnection("Data Source=(Local);Initial Catalog=ParkPay;Integrated Security=SSPI;MultipleActiveResultSets=True;"))
        {
            var adap = new SqlDataAdapter("select * from parkpay.Terminal", sqn);
            var dt = new DataTable();
            adap.Fill(dt);
            Session["ReportData"] = dt;
        }
        return RedirectToAction("ShowReport", "AspxReportViewer");
    }
}

public class AspxReportViewerController : Controller
{
    public void ShowReport()
    {
        Response.Redirect("~/AspxForms/ReportViewer.aspx");
    }
}

网络表单:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewer.aspx.cs" Inherits="ParkPay.Reports.Crystal.AspxForms.ReportViewer" %>

<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form" runat="server">        
        <CR:CrystalReportViewer ID="CrystalReportViewer" runat="server" AutoDataBind="true" />
    </form>
</body>
</html>

这两个项目 - 我的和示例 - 几乎相同,但当我在我的项目上调用终端等报告操作时,我得到的只是一个空白页面。它上面有一个Crystal查看器,这是一个div,超出了我的水平。

主要工作是在ReportViewer.aspx

的代码中完成的
protected void Page_Load(object sender, EventArgs e)
{
    var reportDoc = new ReportDocument();
    var reportName = Session["ReportName"].ToString();
    var dataSource = Session["ReportData"] as DataTable;
    var reportPath = Path.Combine(Server.MapPath("~/Reports"), reportName);
    reportDoc.Load(reportPath);
    reportDoc.SetDataSource(dataSource);
    CrystalReportViewer.ReportSource = reportDoc;
}

这在示例和我的项目中都是相同的。如果我将我的一个报告复制到示例项目中,它可以完美地工作。两个web.config文件看起来都一样。示例报告中没有“特殊”文件,而不是我的。唯一明显的区别是我的项目是一个小型解决方案中的启动项目,其中示例项目是独立的。在解决方案中,但仅在那里。

我可能有什么不对,或者可能有什么区别?我正在考虑简单地将所有报告移到示例中并从我的项目中调用它。

注意: JavaScript控制台会显示以下错误:

Failed to load resource: the server responded with a status of 404 (Not Found):  http://localhost:17441/aspnet_client/system_web/4_0_30319/crystalreportviewers13/js/crviewer/crv.js

Failed to load resource: the server responded with a status of 404 (Not Found):  http://localhost:17441/aspnet_client/system_web/4_0_30319/crystalreportviewers13/js/crviewer/images/style.css

和两个

Uncaught ReferenceError: bobj is not defined:   ReportViewer.aspx:56 ReportViewer.aspx:64

2 个答案:

答案 0 :(得分:8)

Aha the old bobj is not defined

这意味着您在与IIS中的默认站点不同的站点中运行ASP。安装Crystal Reports时,它会在C:\Inetpub\wwwroot\aspnet_client中放置一组文件,这些文件是报表查看器工作所必需的。

解决方案:将C:\Inetpub\wwwroot\aspnet_client下方的水晶文件复制到您的网站根文件夹。

要获得正确的路径,请转到IIS管理器&gt;网站&gt; [您的网站]&gt;右键单击&gt;管理网站&gt;高级设置...&gt;物理路径。您需要的实际文件位于wwwroot\aspnet_client\system_web\[framework version]\crystalreportviewers13之下,但通常最简单的方法是将整个aspnet_client文件夹从默认的webroot复制到您网站的webroot。

答案 1 :(得分:0)

如果您浏览到wwwroot文件夹,并将aspnet_client文件夹拖到您的项目中,那么它将添加所有文件。

C:\的Inetpub \ wwwroot的

我还在努力让这个工作正常,因为这样做还不够。

迄今为止我发现的关于这个主题的看似最好的文章是: http://scn.sap.com/community/crystal-reports-for-visual-studio/blog/2011/01/12/how-do-i-resolve-bobj-is-undefined-issue

然而,我现在尝试了第1步和第2步。 4,但到目前为止还没有成功......

  

以下是上述方案的解决方案:

     

1.复制文件夹&#34; crystalreportviewers12&#34;来自“C:\ Inetpub \ wwwroot \ system_web \ 2_0_50727&#34;在“默认网站”下   IIS中的“自定义网站”目录。或者,创建一个虚拟目录   将'aspnet_client'文件夹指向自定义网站目录。

     

2.在IIS Manger中,选择“应用程序池”和“基本设置”。在Managed Pipeline Mode下,将Integrated Mode更改为Classic Mode。

     

3.resoureURI的价值应为&#34;〜/ crystalreportviewers12&#34;不是&#34; / crystalreportviewers12&#34;。

     

4.从&#34; C:Program Files \ Business Objects \ Common \ 4.0&#34;复制CrystalReportViewers12文件夹。并粘贴到   &#34; C:\的Windows \ Microsoft.NET \框架\ v3.5版本\ ASP.NETClientFiles&#34;

     

注意:框架可能因使用的Visual Studio版本而异。

我的错误:

  

0x800a1391 - JavaScript运行时错误:&#39; bobj&#39;未定义

bobj.crv.stateManager.setComponentState('CrystalReportViewer1__UI',eval('('+document.getElementById('__CRYSTALSTATECrystalReportViewer1').value+')'));

不知何故,我似乎与不同的版本存在冲突。 VS想要使用4_6_30,但我似乎在其他地方有4_0_30319的文件夹......

因此,我可以让它放弃bobj错误,但它仍然不显示报告查看器。如果指定一个报告,现在我只是加载报告失败了...但我让它通过VS创建一个新的报告......