不确定这是否是要求的地方,或者是否有人有使用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值用作我视图中的变量或类似的东西。
答案 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 })
这似乎是让这项工作最直接的方法。