【发布时间】:2015-06-08 12:57:41
【问题描述】:
我花了几个小时试图解决这个问题,到目前为止,我可以找到基于 MVC1、MVC2 和 MVC3 的解决方案,但没有关于 MVC5 和使用 SSRS 和 ReportViewer 的信息。坦率地说,我不了解 WebForms,因为在 MVC 成为我工作的商店中的一件大事之后,我加入了编程世界。足够的额外背景故事,我会谈到它。
我有:
- 写了一个存储过程
- 使用 VS 2013 中的商业智能工具来设计我的报告
- 在设计器中查看了报表就知道不错了
- 尝试将 ReportViewer 集成到我的应用程序中,但没有成功
- 确定我似乎需要重新执行我的查询调用(尽管它在报告设计中),并使用一组测试日期编写代码来执行此操作
- Determined WebForms 以某种方式参与让我的报告显示在我的应用程序中。
所以我已经达到了我认为我只需要 aspx 文件来做我需要做的事情的地步。如果有人能看一下这件事并帮助我,你会治愈我很多小时的压力。
首先,我的 RouteConfig.cs 文件的 sn-p:
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
我的报告控制器代码:
[HttpPost]
public ActionResult GetSysWideQuizReport([Bind(Include = "Topic, Date1, Date2")] QuizReporting quizParams)
{
ReportViewer ReportViewer1 = new ReportViewer();
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\System Quiz Report.rdl";
ReportDataSource source = new ReportDataSource("DataSet1", QuizData(quizParams));
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(source);
return View(ReportViewer1);
}
private DataTable QuizData(QuizReporting quizParams)
{
DataSet ds = new DataSet("DataSet1");
using(SqlConnection connection = new SqlConnection())
{
connection.ConnectionString = GetConnectionString();
SqlCommand cmd = new SqlCommand("SystemQuizReport", connection);
//cmd.CommandText = "EXEC SchoolQuizReport @TopicID, @Date1, @Date2";
cmd.Parameters.AddWithValue("@TopicID", quizParams.Topic.TopicID);
cmd.Parameters.AddWithValue("@Date1", "2015/04/13");
cmd.Parameters.AddWithValue("@Date2", "2015/04/16");
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
return ds.Tables[0];
}
}
static private string GetConnectionString()
{
return "Data Source=(localdb)\\v11.0; Initial Catalog=UCAPDB-20140822124213; Integrated Security=True;";
}
还有我的“视图”(真正的 aspx)代码:
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="600">
</rsweb:ReportViewer>
</form>
</body>
</html>
我目前的错误是:
“~/Views/Reporting/GetSysWideQuizReport.aspx”中的视图必须派生自 ViewPage、ViewPage、ViewUserControl 或 ViewUserControl。
更新
我已经尝试了下面的建议解决方案,但显然失败了。所以我继续前进,我将 RDL 转换为 RDLC,并使用设计向导将调用插入到 ASPX 页面的 ReportViewer。现在我遇到了一大堆奇怪的 AJAX 错误。
更新了 GetSysWideQuizReport.aspx:
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page language="C#" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Quiz Report</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="915px" Height ="1000px" Font-Names="Lato" Font-Size="10pt" ShowBackButton="False" ShowRefreshButton="False" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt">
<LocalReport ReportPath="ReportViews\System Quiz Report.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="LocalDb" Name="DataSet1" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:SqlDataSource ID="LocalDb" runat="server" ConnectionString="<%$ ConnectionStrings:LocalDb %>" SelectCommand="SystemQuizReport" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:FormParameter FormField="TopicID" Name="TopicID" Type="Int32" />
<asp:FormParameter DbType="DateTime2" FormField="Date1" Name="Date1" />
<asp:FormParameter DbType="DateTime2" FormField="Date2" Name="Date2" />
</SelectParameters>
</asp:SqlDataSource>
</form>
</body>
</html>
用户表单直接发布到这个 aspx 页面。现在我的错误:
Uncaught SyntaxError: Unexpected token < ScriptResource.axd:1
Uncaught SyntaxError: Unexpected token < GetSysWideQuizReport.aspx:40
Uncaught Error: ASP.NET Ajax client-side framework failed to load. ScriptResource.axd:1
Uncaught SyntaxError: Unexpected token < Reserved.ReportViewerWebControl.axd:1
Uncaught SyntaxError: Unexpected token < ScriptResource.axd:1
Uncaught SyntaxError: Unexpected token < GetSysWideQuizReport.aspx:49
Uncaught ReferenceError: Sys is not defined GetSysWideQuizReport.aspx:114
Uncaught ReferenceError: Sys is not defined GetSysWideQuizReport.aspx:55
Uncaught ReferenceError: $get is not defined
【问题讨论】:
标签: c# asp.net asp.net-mvc reporting-services