这是早晨问的问题,估计没几率再看到了,所以贴一下
虽然有一个回答,但是MVC的actionz中似乎不能使用Response.Write。
看了另外的文章,有点感觉可能是扩展一个ActionResult,但流的知识忘的差不多了,无法把二进制的RDLC的数据呈现到页面的一个div当中,在页面中我使用的是HTML.RederAction来加载报表的预览。
这是ReportsResult
public class ReportsResult : ActionResult
{
public ReportsResult(byte[] data, string mineType)
{
this.Data = data;
this.MineType = mineType;
}
public byte[] Data { get; set; }
public string MineType { get; set; }
public override void ExecuteResult(ControllerContext context)
{
if (Data == null)
{
new EmptyResult().ExecuteResult(context);
return;
}
context.HttpContext.Response.ContentType = MineType;
using (MemoryStream ms = new MemoryStream(Data))
{
ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
context.HttpContext.Response.Output.Write(sr.ReadToEnd());
}
}
}
}
重新写的action
public ActionResult EmployeesNumberPerYear()
{
string dtatSetName = "DsENPerYear";
var dataSource = EmployeeReports.EmployeesNumberPerYear(employeeRepository);
string reportFilePath = Server.MapPath("~/RDLC/Employee/EmployeesNumberPerYear.rdlc");
string reportType = "PDF";
string mimeType;
string encoding;
string fileNameExtension;
byte[] renderedBytes = HotelReport.GenerateReport(dtatSetName, dataSource, reportFilePath,
reportType, out mimeType, out encoding, out fileNameExtension);
return new ReportsResult(renderedBytes, mimeType);
}
可能些的有点问题。
关注一下。