Wie kann ich mit RDLC reports mit dem ReportViewer-Steuerelement in ASP.Net MVC?
Ich bin ziemlich neu in ASP.Net MVC. Ich habe eine Anforderung und zeigt einen RDLC-Bericht in MVC.
Im Grunde meine Forderung als auch, was ich getan habe ist :-
Ich habe eine ReportController Erben APIController, die eine Methode hat, die ein DataSet zurückgibt. Dieser Datensatz wird gesendet, um das RDLC-Datei.
Dafür habe ich Folgendes getan, aber konnte nicht machen den Bericht zu arbeiten.
Habe ich eine model-Klasse mit der ReportParameter wie folgt:
public class ReportParameter
{
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
}
Habe ich folgende controller ReportViewController :
public class ReportViewController : Controller
{
static readonly ReportController ctrl = new ReportController();
public ActionResult GenerateReport()
{
return View();
}
[HttpPost]
public ActionResult GenerateReport(ReportParameterSalesOrder param)
{
if (ModelState.IsValid)
{
Helpers.DataLayer dl = new Helpers.DataLayer();
if (param.DateFrom != null)
{
DateTime DateFrom = Convert.ToDateTime(param.DateFrom);
DateTime DateTo = Convert.ToDateTime(param.DateTo);
string fdate = DateFrom.ToString("yyyy/MM/dd");
string tdate = DateTo.ToString("yyyy/MM/dd");
Session["ReportSales"] = ctrl.ReportSales(param);
}
return Redirect(Url.Action("ViewReport", "ReportView"));
}
return View();
}
public ActionResult ViewReport()
{
return View();
}
}
Habe ich einen API-Controller ReportController, deren Objekt wurde in der oben ReportViewerController um ein DataSet zu generieren und füllen Sie die RDLC-Bericht. Die API Controller:
public class ReportController : ApiController
{
static readonly IReportRepository repository = new ReportRepository();
[ActionName("ReportSales")]
public DataSet ReportSales(ReportParameterSalesOrder paramSO)
{
DataSet item = repository.ReportSales(paramSO);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
}
Habe ich zwei Ansichten GenerateReport.aspx und ViewReport.aspx. Die GenerateReport.aspx ist unten angegeben:
<table style="width: 40%;">
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label1" runat="server" Text="From Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a=> a.DateFrom, new{id="startDate",style="width:250px;"}) %>
<%=@Html.ValidationMessageFor(a => a.DateFrom)%>
</td>
</tr>
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a => a.DateTo, new { id = "ToDate", style = "width: 250px;" })%>
<%=@Html.ValidationMessageFor(a => a.DateTo)%>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
<input id="btnsearch" class="button" type="submit" value="Show" />
</td>
</tr>
</table>
Den ViewReport.aspx ist unten angegeben:
<center style="width: 974px">
<iframe id="myReport" width="100%" height="450px" src="ReportViewer.aspx">
</iframe></center>
Ich habe ein Dataset.xsd, eine rdlc-Datei und eine aspx-Seite zu fügen Sie die rdlc-Datei.
Aber ich kann nicht damit es funktioniert. Wie kann ich den Bericht anzuzeigen, oder wie kann ich das Auffüllen des dataset, die ich empfangen, die von dem Controller zu dem Bericht ?
ViewReport.aspx
verwendet in der iframe
werden müssen, um eine gute altmodische web-Formular mit code-behind - z.B. das DataSet im code hinter ViewReport.aspx.cs
. Was kann man wohl tun ist, übergeben Sie die Daten aus dem MVC Controller über die Session[]
variable?Die ViewReport.aspx nicht über eine code-behind-Datei. Können Sie erklären, ein wenig mehr ?
InformationsquelleAutor Nubicus | 2015-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hintergrund
(Ich weiß, Sie wissen das, aber für zukünftige Leser 😉
Session
Staat ist geteilt zwischen MVC und WebForms.Im Detail
Die
ViewReport.aspx
Seite verwendet werden, zu machen das ReportViewer-Steuerelement in deriframe
auf dem MVC-Ansicht muss eine gute altmodische asp.Net web-Formular.Für kleine Daten-Mengen, die Sie abholen können die report-Daten in der MVC-Controller und übergeben Sie diese in
Session
über die WebForm.Jedoch für größere Datenmengen würde ich empfehlen, dass Sie stattdessen die übergabe der Parameter über die WebForm in der Session (oder auch über die
QueryString
, wenn Sie nicht so empfindlich), und dann das WebForm-CodeBehind brauchen würde, um die Daten abzurufen, setzen und binden Sie es an der ReportViewer.Auf der MVC-Seite, in der
MyController
parameter post:Können Sie zeigen, dass der IFrame, sobald die ReportParameters wurden, durch den Benutzer eingegebene, auf die Ansicht
MyController/GenerateReport
:Dann fügen Sie eine WebForms-Seite
/OldSkoolAspx/ReportViewer.aspx
um Ihre MVC-Projekt. In der code-behindReportViewer.aspx.cs
:Und in der WebForms -
ReportViewer.aspx
front-end, um das Steuerelement (empfehlen die Verwendung der toolbox, so dass alle erforderlichen Verweise Hinzugefügt, um die web -.Konfiguration):Gibt es viele bewegliche Teile hier, also ich habe hochgeladen ein demo-Projekt zu GitHub hier
Beachten Sie, dass die gleiche Technik funktioniert auch für Berichtsserver generierten Berichte (z.B. mithilfe von ReportViewer mit .RDL-Berichte). Aber vorsichtig sein, dass beide RDLC und RDL werden kann Reale
SessionState
SchweineHi, aber die Sache ist, wenn mein Bericht lädt die andere Funktionen blockiert, auch ich habe versucht, asnycrender zu wahren bt alle functionalites Arbeit nur nach dem Bericht ist vollständig geladen, keine Ahnung?
Mann,es hat mir geholfen, aus großer Zeit. 🙂
InformationsquelleAutor StuartLC