MVCReportViewer帮助 - 无法将参数传递给报表 - ViewBag问题

时间:2016-06-03 02:10:00

标签: asp.net asp.net-mvc reporting-services

不确定这是否是要求的地方,或者是否有人有使用MVCReportViewer(https://github.com/ilich/MvcReportViewer)的经验,但我正在努力让它与我的应用程序一起工作。我只想将一些参数传递给报表,将报表URL传递给查看器,但它无法正常工作。如果我输入预期的URL和参数它可以工作,但任何动态的东西都不起作用......

以下是我如何调用reportviewer:

@Html.MvcReportViewerFluent(pReportURL).ReportParameters(new { StartingItem = pStartingItem, EndingItem = pEndingItem }).Attributes(new { Height = 500, Width = 1200, style = "border:none; background-color:white;" }).ControlSettings(new ControlSettings { ShowParameterPrompts = false })

虽然我使用ViewBags获取变量的值。

@{ 
var pReportURL = (string)ViewBag.reportURL;
var pStartingItem = (string)ViewBag.StartingItem;
var pEndingItem = (string)ViewBag.EndingItem;
}

我设置了一些断点,变量被分配了值,但似乎它们永远不会传递给reportviewer。我刚收到一条错误消息,指出"报告未指定"即使我可以通过断点查看URL的值。我正确宣布这些吗?我是MVC的新手,这似乎是最简单的方法,但我现在正在努力。

EDIT1:所以在弄乱了一些问题后,问题不在于报告查看器,而在于我如何使用我的变量。如果我宣布我的" var pReportURL =' Report / ThisReport'"它会工作。因此,即使在我的断点中,我的ViewBags是正确的值,我必须错误地使用它们...我需要做什么才能将ViewBags值用作我视图中的变量或类似的东西。

1 个答案:

答案 0 :(得分:1)

对任何使用MvcReportViewer并且正在努力解决类似问题的人提出这个问题......不确定这是否是最好的方法让它工作但它对我有用,所以我想我会分享。

通过阅读文档,我能够找到一个人的例子,他们正在做类似的事情,将值从控制器传递到视图,然后使用这些值作为报告的参数。

在我的控制器中,我使用以下语法将一些值作为TempData传递给视图

public ActionResult CurrentBomReport(CurrentBomViewModel model)
{

//do some logic first...
//declare parameters as tempdata.
TempData["reporturlparam"] = model.reporturlparam;
TempData["reportparam1"] = model.reportparam1;
TempData["reportparam2"] = model.reportparam2;

return View(model);
}

然后在我看来......

@{ 
string reporturl = (string)TempData["reporturlparam"];

    var parameters = new List<KeyValuePair<string, object>>
    {
    new KeyValuePair<string, object>("NameOfReportParam1", (string)TempData["reportparam1"]),
    new KeyValuePair<string, object>("NameOfReportParam2", (string)TempData["reportparam2"])
    };
}

@Html.MvcReportViewerFluent(reporturl).ReportParameters(parameters).Attributes(new { Height = 500, Width = 500, style = "border:none; background-color:white;" }).ControlSettings(new ControlSettings { ShowParameterPrompts = false })

这似乎是让这项工作最直接的方法。