【发布时间】:2015-01-01 09:23:27
【问题描述】:
我对 ASP.Net MVC 还很陌生。我需要在 MVC 中显示基于 RDLC 的报告。
基本上我的要求以及我所做的是:-
我有一个继承 APIController 的 ReportController,它有一个返回 DataSet 的方法。此数据集正在发送到 RDLC 文件。
为此,我执行了以下操作,但无法使报告正常工作。
我创建了一个名为 ReportParameter 的模型类,如下所示:
public class ReportParameter
{
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
}
我有以下控制器 ReportViewController :
public class ReportViewController : Controller
{
static readonly ReportController ctrl = new ReportController();
public ActionResult GenerateReport()
{
return View();
}
[HttpPost]
public ActionResult GenerateReport(ReportParameterSalesOrder param)
{
if (ModelState.IsValid)
{
Helpers.DataLayer dl = new Helpers.DataLayer();
if (param.DateFrom != null)
{
DateTime DateFrom = Convert.ToDateTime(param.DateFrom);
DateTime DateTo = Convert.ToDateTime(param.DateTo);
string fdate = DateFrom.ToString("yyyy/MM/dd");
string tdate = DateTo.ToString("yyyy/MM/dd");
Session["ReportSales"] = ctrl.ReportSales(param);
}
return Redirect(Url.Action("ViewReport", "ReportView"));
}
return View();
}
public ActionResult ViewReport()
{
return View();
}
}
我有一个 API 控制器 ReportController,其对象已在上述 ReportViewerController 中创建,用于生成 DataSet 并填充 RDLC 报告。 API 控制器是:
public class ReportController : ApiController
{
static readonly IReportRepository repository = new ReportRepository();
[ActionName("ReportSales")]
public DataSet ReportSales(ReportParameterSalesOrder paramSO)
{
DataSet item = repository.ReportSales(paramSO);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
}
我有两个视图 GenerateReport.aspx 和 ViewReport.aspx。 GenerateReport.aspx 如下:
<table style="width: 40%;">
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label1" runat="server" Text="From Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a=> a.DateFrom, new{id="startDate",style="width:250px;"}) %>
<%=@Html.ValidationMessageFor(a => a.DateFrom)%>
</td>
</tr>
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a => a.DateTo, new { id = "ToDate", style = "width: 250px;" })%>
<%=@Html.ValidationMessageFor(a => a.DateTo)%>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
<input id="btnsearch" class="button" type="submit" value="Show" />
</td>
</tr>
</table>
ViewReport.aspx 如下:
<center style="width: 974px">
<iframe id="myReport" width="100%" height="450px" src="ReportViewer.aspx">
</iframe></center>
我已经添加了一个Dataset.xsd、一个rdlc文件和一个aspx页面来添加rdlc文件。
但我不能让它工作。如何显示报告,或者如何将我从控制器收到的数据集填充到报告中?
【问题讨论】:
-
ViewReport.aspx中使用的iframe需要是一个带有代码的老式 Web 表单 - 例如在ViewReport.aspx.cs后面的代码中设置DataSet。您可能会做的是通过Session[]变量从 MVC 控制器传递数据? -
ViewReport.aspx 没有代码隐藏文件。能再解释一下吗?
标签: c# asp.net-mvc asp.net-mvc-4 reporting-services rdlc