- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我花了几个小时试图解决这个问题,到目前为止,我可以找到基于 MVC1、MVC2 和 MVC3 的解决方案,但没有找到关于 MVC5 和使用 SSRS 和 ReportViewer 的解决方案。坦率地说,我不知道 WebForms,因为我是在 MVC 成为我工作的商店中的一件大事之后才加入编程世界的。足够多的额外背景故事,我会开始的。
我有:
所以我已经达到了我认为我只需要 aspx 文件来完成我需要做的事情的地步。如果有人能仔细阅读并帮助我,你会治愈我许多小时的压力。
首先,我的 RouteConfig.cs 文件的一个片段:
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 }
我的报告 Controller 代码:
[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;";
}
还有我的“ View ”(真正的 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>
我目前的错误是:
The view at '~/Views/Reporting/GetSysWideQuizReport.aspx' must derive from ViewPage, ViewPage, ViewUserControl, or 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
最佳答案
您必须使用 ASPX 页面,只需在您的 MVC 应用程序的根目录下添加一个新文件夹(例如:WebForms)并在其中添加一个新的 ASPX 网络表单。
在aspx页面中你可以添加reportviewer
<rsweb:ReportViewer ID="reportViewer" runat="server" Width="100%" Height="800" CssClass="reportViewer" ShowPrintButton="False">
</rsweb:ReportViewer>
在aspx页面的代码后面
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!string.IsNullOrEmpty(Request.QueryString["ReportFolder"]))
{
string reportpath = HttpUtility.HtmlDecode(Request.QueryString["ReportFolder"]);
int aantalKeys = Request.Params.AllKeys.Length;
List<ReportParameter> parameters = new List<ReportParameter>();
for (int i = 1; i < aantalKeys; i++)
{
string value = Request.Params[i];
string key = Request.Params.Keys[i];
if (key.Contains("_RAP"))
{
int index = key.IndexOf('_');
key = key.Substring(0, index);
ReportParameter parameter = new ReportParameter(key, HttpUtility.HtmlDecode(value));
parameters.Add(parameter);
}
}
this.RenderReport(reportpath, parameters);
}
}
}
private void RenderReport(string reportpath, List<ReportParameter> parameters = null)
{
string User = [ReportserverUser];
string Pass = [ReportserverPass];
string ReportServerUrl = [ResportserverUrl]];
IReportServerCredentials irsc = new CustomReportCredentials(User, Pass, "");
Uri uri = new Uri(ReportServerUrl);
int lastSegment = uri.Segments.Length - 1;
string page = uri.Segments[lastSegment];
// EVENTS
//reportViewer.Load += reportViewer_Load;
//reportViewer.Unload += reportViewer_Unload;
reportViewer.Visible = true;
reportViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
reportViewer.ServerReport.ReportServerCredentials = irsc;
reportViewer.ServerReport.ReportServerUrl = new Uri(uri.AbsoluteUri.Replace(page, ""));
reportViewer.ServerReport.ReportPath = reportpath;
if (parameters != null && parameters.Count != 0)
{
reportViewer.ServerReport.SetParameters(parameters);
}
reportViewer.ServerReport.Refresh();
}
private Dictionary<string, object> GetCurrentParameters()
{
var parameterCollection = reportViewer.ServerReport.GetParameters();
var param = new Dictionary<string, object>();
foreach (var p in parameterCollection)
{
var name = p.Name;
if (p.DataType == ParameterDataType.DateTime)
{
var d = Convert.ToDateTime(p.Values[0]);
param[name] = d.ToString("dd-MM-yyyy");
}
else
{
var values = p.Values.ToList();
param[name] = values;
}
}
return param;
}
有了这个,你应该能够导航到 http://localhost:port/webForms/yourpage.aspx?reportfolder=[reportpath]¶m1_RAP=1¶m2_RAP=ogjirewog
您需要在后面的代码中提供以下参数- ReportserverUser 和 ReportserverPass:可以登录到报告服务器界面并访问报告的凭据。- 报告服务器网址:这是报告服务器 Asxm 网络服务的网址- reportpath:报告在reportingserver中的路径(只有名称,末尾没有扩展名)
关于c# - MVC5 和 SSRS ReportViewer - 如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30709782/
背景: 我最近一直在使用 JPA,我为相当大的关系数据库项目生成持久层的轻松程度给我留下了深刻的印象。 我们公司使用大量非 SQL 数据库,特别是面向列的数据库。我对可能对这些数据库使用 JPA 有一
我已经在我的 maven pom 中添加了这些构建配置,因为我希望将 Apache Solr 依赖项与 Jar 捆绑在一起。否则我得到了 SolarServerException: ClassNotF
interface ITurtle { void Fight(); void EatPizza(); } interface ILeonardo : ITurtle {
我希望可用于 Java 的对象/关系映射 (ORM) 工具之一能够满足这些要求: 使用 JPA 或 native SQL 查询获取大量行并将其作为实体对象返回。 允许在行(实体)中进行迭代,并在对当前
好像没有,因为我有实现From for 的代码, 我可以转换 A到 B与 .into() , 但同样的事情不适用于 Vec .into()一个Vec . 要么我搞砸了阻止实现派生的事情,要么这不应该发
在 C# 中,如果 A 实现 IX 并且 B 继承自 A ,是否必然遵循 B 实现 IX?如果是,是因为 LSP 吗?之间有什么区别吗: 1. Interface IX; Class A : IX;
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在阅读标准haskell库的(^)的实现代码: (^) :: (Num a, Integral b) => a -> b -> a x0 ^ y0 | y0 a -> b ->a expo x0
我将把国际象棋游戏表示为 C++ 结构。我认为,最好的选择是树结构(因为在每个深度我们都有几个可能的移动)。 这是一个好的方法吗? struct TreeElement{ SomeMoveType
我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和用户想要的新用户名,然后检查用户名是否已被占用。如果采用该方法,则该方法应该返回带有数据库中未采用的数字的用户名。 例子: “贾
我正在尝试实现 Breadth-first search algorithm , 为了找到两个顶点之间的最短距离。我开发了一个 Queue 对象来保存和检索对象,并且我有一个二维数组来保存两个给定顶点
我目前正在 ika 中开发我的 Python 游戏,它使用 python 2.5 我决定为 AI 使用 A* 寻路。然而,我发现它对我的需要来说太慢了(3-4 个敌人可能会落后于游戏,但我想供应 4-
我正在寻找 Kademlia 的开源实现C/C++ 中的分布式哈希表。它必须是轻量级和跨平台的(win/linux/mac)。 它必须能够将信息发布到 DHT 并检索它。 最佳答案 OpenDHT是
我在一本书中读到这一行:-“当我们要求 C++ 实现运行程序时,它会通过调用此函数来实现。” 而且我想知道“C++ 实现”是什么意思或具体是什么。帮忙!? 最佳答案 “C++ 实现”是指编译器加上链接
我正在尝试使用分支定界的 C++ 实现这个背包问题。此网站上有一个 Java 版本:Implementing branch and bound for knapsack 我试图让我的 C++ 版本打印
在很多情况下,我需要在 C# 中访问合适的哈希算法,从重写 GetHashCode 到对数据执行快速比较/查找。 我发现 FNV 哈希是一种非常简单/好/快速的哈希算法。但是,我从未见过 C# 实现的
目录 LRU缓存替换策略 核心思想 不适用场景 算法基本实现 算法优化
1. 绪论 在前面文章中提到 空间直角坐标系相互转换 ,测绘坐标转换时,一般涉及到的情况是:两个直角坐标系的小角度转换。这个就是我们经常在测绘数据处理中,WGS-84坐标系、54北京坐标系
在软件开发过程中,有时候我们需要定时地检查数据库中的数据,并在发现新增数据时触发一个动作。为了实现这个需求,我们在 .Net 7 下进行一次简单的演示. PeriodicTimer .
二分查找 二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。
我是一名优秀的程序员,十分优秀!