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

Asp.net mvc 为什么我的Crystal Report和Viewer在MVC应用程序的Web窗体上不可见?,asp.net-mvc,crystal-reports,webforms,crystal-reports-2010,Asp.net Mvc,Crystal Reports,Webforms,Crystal Reports 2010,我正在将代码从示例MVC 3应用程序复制到新的MVC 4应用程序中。代码将报告参数设置为会话,即报告名称和报告数据,然后调用一个.aspx页面,该页面上只有一个CrystalReportViewer,以显示报告: public class ReportController : Controller { public ActionResult Terminal() { Session["ReportName"] = "Terminal.rpt"; u

我正在将代码从示例MVC 3应用程序复制到新的MVC 4应用程序中。代码将报告参数设置为会话,即报告名称和报告数据,然后调用一个.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>
这在示例和我的项目中都是相同的。如果我将我的一个报告复制到示例项目中,它将非常有效。两个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

那两个呢

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

Aha未定义旧的
bobj

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

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


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

如果您浏览到wwroot文件夹,并将aspnet_client文件夹拖到项目中,然后它将添加所有文件

C:\inetpub\wwwroot

我仍在努力让这个工作,因为仅仅这样做还不够

到目前为止,我找到的关于这个主题的似乎最好的文章是:

然而,我现在已经尝试了步骤1和步骤4,但到目前为止还没有成功

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

1.将文件夹“crystalreportviewers12”从“默认网站”下的“C:\Inetpub\wwwroot\system\u web\2\u 0\u 50727”复制到 IIS中的“自定义网站”目录。或者,创建虚拟目录 指向自定义网站目录中的“aspnet\u client”文件夹

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

3.ResourceUri的值应为“~/crystalreportviewers12”而不是“/crystalreportviewers12”

4.将CrystalReportViewers12文件夹从“C:Program Files\Business Objects\Common\4.0”复制并粘贴到 “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.创建了一个新报表。

控制台中显示了任何JavaScript错误吗?谢谢,听起来不错。我不敢相信那些人的愚蠢e、 嘿,每个人,我都有同样的问题,但在IIS 8.0 Express上。我有在VS2012.NET FRAMEWORK 4.5中构建的web应用程序。我使用web MATRIX和WINDOWS 7在IIS 8 Express上部署了我的应用程序。我的应用程序根目录中有crystalreportviewers13文件夹的副本,还有asp_NET文件夹。但crystal report viewer仍然没有安装我正在显示任何内容。任何人都可以帮助我。@AqEeL,您是否在浏览器的javascript控制台中收到
bobj未定义
错误,或者其他错误?@Rory是的,我得到了以下错误,当我运行VS2012时,它运行正常,但当我部署了它,然后它向我显示此错误。ReferenceError:bobj不是defined…tate('CrystalReportViewer1_uuui',eval('+document.getElementById(''uu CRYSTALSTATE…)。。。
Uncaught ReferenceError: bobj is not defined:   ReportViewer.aspx:56 ReportViewer.aspx:64
bobj.crv.stateManager.setComponentState('CrystalReportViewer1__UI',eval('('+document.getElementById('__CRYSTALSTATECrystalReportViewer1').value+')'));