簡體   English   中英

使用AngularJS渲染ASP.NET MVC PartialView

[英]Render ASP.NET MVC PartialView Using AngularJS

我正在嘗試使用ASP.NET MVC 5將Report Viewer for MVC集成到我的角度應用程序中。

報告:

查看/報告/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);
    }
}

路由配置

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-Internal Server Error的問題。

我進行了一些隨機試驗和錯誤,發現如果我使Report / Index.cshtml僅包含純HTML(不包含剃須刀),則將不包含任何內容。 但是,當我在視圖中包含@model語句時,將獲得HTTP500。有人可以幫助我解決此問題嗎? 我的控制器的斷點(GET索引)工作正常。

僅供參考,我直接通過瀏覽器上的URL訪問“報告”頁面,僅用於快速測試。

關於如何處理此問題的任何建議? 我的主要目標是顯示ReportViewer,因為一旦將其呈現在視圖上,便可以從那里開始工作。

帶有純HTML的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>
            }*@
            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>

為了結束這個問題,

我最終根本沒有使用報表查看器。 我剛剛創建了一個MVC控制器,該控制器從水晶報表生成Excel / PDF。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM