我对ASP.Net MVC比较陌生。我的需求是在MVC中显示一个基于RDLC的报告。
我的需求以及我已经完成的工作如下:
我创建了一个ReportController,继承自APIController,其中有一个返回DataSet的方法。这个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中创建,用于生成数据集并填充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 文件中。
但是我无法使它工作。我该如何显示报表,或者如何将从控制器接收到的数据集填充到报表中?
iframe
中使用的ViewReport.aspx
需要是一个具有代码后台的良好传统 Web 表单 - 例如,在ViewReport.aspx.cs
的代码后台中设置 DataSet。您可以通过Session[]
变量从 MVC 控制器传递数据。 - StuartLC