LSTANCZYK
3/21/2017 - 4:55 PM

A Filter Attribute that lets you download an ASP.NET MVC View as a Word Document

A Filter Attribute that lets you download an ASP.NET MVC View as a Word Document

public class WordDocumentAttribute : ActionFilterAttribute
{
    public string DefaultFilename { get; set; }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var result = filterContext.Result as ViewResult;

        if (result != null)
            result.MasterName = "~/Views/Shared/_LayoutWord.cshtml";

        filterContext.Controller.ViewBag.WordDocumentMode = true;

        base.OnActionExecuted(filterContext);
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        var filename = filterContext.Controller.ViewBag.WordDocumentFilename;
        filename = filename ?? DefaultFilename ?? "Document";

        filterContext.HttpContext.Response.AppendHeader("Content-Disposition", string.Format("filename={0}.doc", filename));
        filterContext.HttpContext.Response.ContentType = "application/msword";

        base.OnResultExecuted(filterContext);
    }
}