5

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

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>

这两个项目 - 我的和示例 - 几乎相同,但是当我在我的项目上调用诸如终端之类的报告操作时,我得到的只是一个空白页。它上面有一个水晶查看器,这是一个div完全超出我水平的 JavaScript 方式。

主要工作在 for 后面的代码中完成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
4

2 回答 2

8

啊哈老bobj is not defined

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

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

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

于 2013-08-04T10:21:43.370 回答
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 步和第 4 步,但到目前为止还没有成功......

以下是针对上述场景的解决方案:

1.将“Default Website”下“C:\Inetpub\wwwroot\system_web\2_0_50727”中的“crystalreportviewers12”文件夹复制到IIS中的“Custom Website”目录下。或者,在自定义中创建一个指向“aspnet_client”文件夹的虚拟目录网站目录。

2.在 IIS 管理器中,选择应用程序池和基本设置。在托管管道模式下,将集成模式更改为经典模式。

3.resoureURI 的值应该是“~/crystalreportviewers12”而不是“/crystalreportviewers12”。

4.从“C:Program Files\Business Objects\Common\4.0”复制CrystalReportViewers12文件夹,粘贴到“C:\Windows\Microsoft.NET\Framework\v3.5\ASP.NETClientFiles”。

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

我的错误:

0x800a1391 - JavaScript 运行时错误:“bobj”未定义

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

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

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

于 2015-06-02T13:08:28.440 回答