2016-05-10 91 views
0

我试图Report Viewer for MVC集成到我的角度应用与ASP.NET MVC 5渲染ASP.NET MVC PartialView使用AngularJS

报告:

查看/报告/ 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"] 
       }) 

我基本上是想尝试呈现此报表浏览器,但我卡住了与得到HTTP 500 - 内部服务器错误控制台上。

我做了一些随机的试验和错误,发现如果我让我的Report/Index.cshtml只包含纯HTML(无剃须刀)它呈现。但是当我在视图中包含我的@model语句时,我得到HTTP 500.任何人都可以帮助我解决这个问题吗?我的控制器(GET索引)断点工作正常。

仅供参考我可以通过浏览器上的URL直接访问报告页面来进行快速测试。

有关我该如何处理这个问题的任何建议?我的主要目标是显示ReportViewer,因为一旦它在视图上呈现,我就可以从那里开始工作。

报告/ Index.cshtml与工程纯HTML ..

@*@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> 

回答

0

就关闭这个问题,

我结束了不使用报表查看器在所有。我刚刚创建了一个MVC控制器,可以从水晶报表生成Excel/PDF。