Skip to content

Instantly share code, notes, and snippets.

@anthonyvscode
Created January 31, 2014 00:48
Show Gist options
  • Save anthonyvscode/8723344 to your computer and use it in GitHub Desktop.
Save anthonyvscode/8723344 to your computer and use it in GitHub Desktop.
Doddle Reports - Export type by parameter
public class ReportResult : DoddleReport.Web.ReportResult
{
private readonly Report report;
public ReportResult(Report report)
: base(report)
{
this.report = report;
}
protected override string GetDownloadFileExtension(HttpRequestBase request, string defaultExtension)
{
var extension = request.Params["extension"];
if (string.IsNullOrEmpty(extension))
return defaultExtension;
return "." + extension;
}
public override void ExecuteResult(ControllerContext context)
{
string defaultExtension = Config.Report.Writers.GetWriterConfigurationByFormat(Config.Report.DefaultWriter).FileExtension;
var response = context.HttpContext.Response;
var writerConfig = GetWriterFromExtension(context, defaultExtension);
response.ContentType = writerConfig.ContentType;
var writer = writerConfig.LoadWriter();
if (!string.IsNullOrEmpty(FileName))
{
var extension = GetDownloadFileExtension(context.HttpContext.Request, defaultExtension);
context.HttpContext.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}{1}", FileName, extension));
}
writer.WriteReport(report, response.OutputStream);
}
private WriterElement GetWriterFromExtension(ControllerContext context, string defaultExtension)
{
string extension = GetDownloadFileExtension(context.RequestContext.HttpContext.Request, defaultExtension);
var writerConfig = Config.Report.Writers.GetWriterConfigurationForFileExtension(extension);
if (writerConfig == null)
throw new InvalidOperationException(
string.Format(
"Unable to locate a report writer for the extension '{0}'. Did you add this fileExtension to the web.config for DoddleReport?",
extension));
return writerConfig;
}
}
http://localhost:80/Area/Controller/Action/{1}?extension={extension}
just pass in xlsx, pdf etc, and it will call the underlying writer instead of using the built in doddle routing which was {action}.{extension}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment