我是ASP.Net MVC的初学者。我用2个模型(Reservations和ReservationDetails)和控制器和视图创建了一个应用程序。 我还制作了一份RDLC报告。
我在ReservationsController中添加了这段代码:
public ActionResult Reports(string ReportType)
{
LocalReport localreport = new LocalReport();
localreport.ReportPath = Server.MapPath("~/Reports/Report_Reservatie.rdlc");
ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "DataSet_Reservaties";
reportDataSource.Value = storeDB.Reservaties.ToList();
localreport.DataSources.Add(reportDataSource);
string reportType = ReportType;
string mimeType;
string encoding;
string fileNameExtension;
if (reportType == "PDF")
{
fileNameExtension = "pdf";
}
else
{
fileNameExtension = "jpg";
}
string[] streams;
Warning[] warnings;
byte[] renderedByte;
renderedByte = localreport.Render(reportType, "", out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
Response.AddHeader("content-disposition", "attachment:filename + reservaties_report." + fileNameExtension);
return File(renderedByte, fileNameExtension);
}
这在我的观点中:
@Html.ActionLink("Export to PDF", "Reports", new { ReportType = "PDF" })
此代码有效,但pfd显示所有预订。
但是我希望在有人制作之后只看到预订信息的PDF。 (而不是所有预订的信息。)
将报告单独绑定到每个预订的最佳方法是什么?
答案 0 :(得分:0)
如果注意事项没有看到您的ViewModel和其他详细信息,则控制器中的关键行似乎是:
reportDataSource.Value = storeDB.Reservaties.ToList();
几乎可以肯定是:
reportDataSource.Value = storeDB.Reservaties.FirstOrDefault(a => a.IDENTIFIER == reportId);
其中IDENTIFIER
是选择单个报告所需的ID。从你的问题不清楚这是什么类型(int,string,Guid),但你应该知道。然后,您需要使用ViewModel将reportId
从View传递到Controller,并使用ActionLink,例如:
@Html.ActionLink("Export to PDF", "Reports", "Reservations", new { ReportType = "PDF", reportId = "12345" }, null)
其中“12345”是相关报告的IDENTIFIER
,应由您的ViewModel提供。
将控制器操作更改为:
public ActionResult Reports(string ReportType, string reportId)
(或int reportId
或Guid reportId
,具体取决于类型)将允许将参数传递给Controller并用于选择单个报告。
充满警告,没有看到更多的代码细节,你可以/应该为你的Controller添加更多的验证(以覆盖null或空参数和结果),但希望这应该让你在路径上。