Ich versuche Report Viewer for MVC meinen Winkel App mit ASP.NET MVC 5.ASP.NET MVC PartialView Render AngularJS Mit
REPORT zu integrieren:
Ansicht/Bericht/Index.cshtml
@model JET.Shop.Common.Models.ReportRequestModel
@using ReportViewerForMvc;
<div>
<div class="row">
<div class="col-md-5">
@using (Html.BeginForm("Index", "Report", FormMethod.Post))
{
<div class="form-group">
<label>Start Date</label>
@Html.TextBoxFor(model => model.StartDate, string.Format("{0:d}", DateTime.Now), new { @id = "startDate", @class = "datefield", type = "date" })
</div>
<div class="form-group">
<label>End Date</label>
@Html.TextBoxFor(model => model.EndDate, string.Format("{0:d}", DateTime.Now), new { @id = "endDate", @class = "datefield", type = "date" })
</div>
}
</div>
<div class="col-md-7">
<div class="form-group">
<input type="submit" value="Generate" />
</div>
</div>
</div>
<div class="row">
@Html.ReportViewer(ViewBag.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)
</div>
</div>
ReportController
public class ReportController : Controller
{
// GET: Report
public ActionResult Index(ReportType reportType = ReportType.SalesOrderList)
{
ReportRequestModel model = new ReportRequestModel();
model.Type = reportType;
model.StartDate = DateTime.Now;
model.EndDate = DateTime.Now;
return PartialView(model);
}
[HttpPost]
public ActionResult Index(ReportRequestModel request)
{
List<ReportParameter> reportParams = new List<ReportParameter>();
ReportViewer reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
SalesOrdersListDataSet salesOrderDataSet = new SalesOrdersListDataSet();
salesOrderDataSet.SalesOrder.AddSalesOrderRow(Guid.NewGuid(), DateTime.Now, DateTime.Now, DateTime.Now.AddDays(1), 500, 60, 440, "Complete");
salesOrderDataSet.SalesOrder.AddSalesOrderRow(Guid.NewGuid(), DateTime.Now, DateTime.Now, DateTime.Now.AddDays(1), 100, 12, 88, "Complete");
ReportDataSource reportDataSource1 = new ReportDataSource();
reportDataSource1.Name = "Report"; //Name of the report dataset in our .RDLC file
reportDataSource1.Value = salesOrderDataSet.SalesOrder;
reportViewer.LocalReport.DataSources.Add(reportDataSource1);
reportViewer.LocalReport.ReportEmbeddedResource = "JET.Shop.WebApp.Reports.SalesOrderListReport.rdlc";
reportViewer.LocalReport.SetParameters(reportParams);
ViewBag.ReportViewer = reportViewer;
return PartialView(request);
}
}
RouteConfig
routes.MapRoute(
name: "ReportController",
url: "Report/Index/{reportType}",
defaults: new { controller = "Report", action = "Index", reportType = UrlParameter.Optional }
);
$ RouteProvider
.when("/Report", {
templateUrl: "/Report/Index",
controller: "ReportController",
loginRequired: true,
requiredRoles: ["Admin"]
})
Ich mag im Grunde versuchen, diesen Report Viewer zu machen, aber ich habe 500 mit dem Erhalten HTTP stecken - Interner Serverfehler auf der Konsole.
Ich habe einige zufällige Versuch und Irrtum und fand heraus, dass, wenn ich meine Bericht/Index.cshtml enthalten nichts als nur HTML (kein Rasierer) es rendert. Aber wenn ich meine @model-Anweisung in die Ansicht einfüge, bekomme ich HTTP 500. Kann mir jemand bei diesem Problem helfen? Haltepunkte zu meinem Controller (GET Index) funktioniert gut.
FYI Ich navigiere zur Berichtseite, indem ich direkt über URL im Browser auf sie zugreife, um nur schnell zu testen.
Irgendwelche Vorschläge, wie soll ich das angehen? Mein Hauptziel ist es, einen ReportViewer anzuzeigen, da ich von dort aus arbeiten kann, sobald er in der Ansicht gerendert wird.
Bericht/Index.cshtml mit einfachen HTML-Code, ..
@*@model JET.Shop.Common.Models.ReportRequestModel
@using ReportViewerForMvc;*@
<div>
<div class="row">
<div class="col-md-5">
@*@using (Html.BeginForm("Index", "Report", FormMethod.Post))
{
<div class="form-group">
<label>Start Date</label>
@Html.TextBoxFor(model => model.StartDate, string.Format("{0:d}", DateTime.Now), new { @id = "startDate", @class = "datefield", type = "date" })
</div>
<div class="form-group">
<label>End Date</label>
@Html.TextBoxFor(model => model.EndDate, string.Format("{0:d}", DateTime.Now), new { @id = "endDate", @class = "datefield", type = "date" })
</div>
}*@
THIS WORKS FINE!
</div>
<div class="col-md-7">
<div class="form-group">
<input type="submit" value="Generate" />
</div>
</div>
</div>
<div class="row">
@*@Html.ReportViewer(ViewBag.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)*@
</div>
</div>