2016-05-10 2 views
0

Я пытаюсь интегрировать Report Viewer for MVC моему угловому приложение с ASP.NET MVC 5.Рендер ASP.NET MVC PartialView Использование AngularJS

ОТЧЕТ:

Посмотреть/Report/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 Index) отлично работают.

FYI Перейдите на страницу «Отчет», обратившись к ней напрямую через URL-адрес браузера для быстрого тестирования.

Любые предложения о том, как я должен подходить к этому? Моя основная цель - отобразить ReportViewer, потому что я могу работать оттуда, когда он будет отображаться в представлении.

Report/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 из отчета Crystal.

Смежные вопросы