Ich bin ziemlich neu in ASP.Net MVC. Ich habe die Anforderung, einen RDLC-basierten Bericht in MVC anzuzeigen.Wie kann ich RDLC-Berichte mit dem ReportViewer Control in ASP.Net MVC verwenden?
Grundsätzlich meine Forderung als auch, was ich getan habe, ist: -
Ich habe einen ReportController vererben APIController, die eine Methode hat, die ein DataSet zurückgibt. Dieses DataSet wird an die RDLC-Datei gesendet.
Dafür habe ich Folgendes getan, konnte aber den Bericht nicht funktionieren.
Ich habe ein Modell Klasse mit dem Namen Reportparameter wie folgt erstellt:
public class ReportParameter
{
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
}
Ich habe 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();
}
}
Ich habe eine API-Controller ReportController deren Gegenstand in der oben geschaffen ReportViewerController, um ein DataSet zu generieren und den RDLC-Bericht aufzufüllen. Die API-Controller ist:
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;
}
}
Ich habe 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>
<%[email protected](a=> a.DateFrom, new{id="startDate",style="width:250px;"}) %>
<%[email protected](a => a.DateFrom)%>
</td>
</tr>
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label></h3>
</td>
<td>
<%[email protected](a => a.DateTo, new { id = "ToDate", style = "width: 250px;" })%>
<%[email protected](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>
Die ViewReport.aspx ist unten angegeben:
<center style="width: 974px">
<iframe id="myReport" width="100%" height="450px" src="ReportViewer.aspx">
</iframe></center>
Ich habe eine Dataset.xsd, eine rdlc-Datei und eine aspx Seite hinzugefügt, um die rdlc Datei hinzufügen .
Aber ich kann es nicht funktionieren lassen. Wie zeige ich den Bericht an oder wie fülle ich die Datenmenge, die ich vom Controller erhält, in den Bericht ein?
Der 'ViewReport.aspx', der im' iframe' verwendet wird, muss ein gutes altmodisches Webformular mit Code dahinter sein - z. Setzen Sie das DataSet im Code hinter 'ViewReport.aspx.cs'. Was Sie wahrscheinlich tun können, ist die Weitergabe der Daten vom MVC-Controller über die 'Session [] 'Variable? – StuartLC
Die ViewReport.aspx hat keinen Code hinter der Datei. Können Sie etwas mehr erklären? – Nubicus