我正在将一个示例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
答案 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创建一个新的报告......