Сохранение HTML-отчета с отображением диалогового окна «Сохранить как»

Я хочу показать пользователю диалоговое окно «Сохранить как» в моем приложении MVC и позволить ему сохранить некоторый HTML-отчет в формате pdf или word. Для этого нужно ли мне играть с файловым потоком и функциями ввода-вывода на стороне сервера? Или это возможно на самом уровне JQuery?

Я нашел несколько ссылок в Интернете, например, о добавлении заголовка ответа Content-Disposition, но не понял, как его применить. Не могли бы вы предложить несколько вариантов?


person Anil Soman    schedule 17.08.2012    source источник


Ответы (1)


Вы должны создать потомка от ActionResult, который будет играть с выводом желаемым образом.

Это мой класс, который я создал для реализации функции «Сохранить как Excel»:

            public class ExcelResult : ActionResult
            {
                private string _fileName;
                private IQueryable _rows;
                private string[] _headers = null;
                private string _data;

                private TableStyle _tableStyle;
                private TableItemStyle _headerStyle;
                private TableItemStyle _itemStyle;

                public string FileName
                {
                    get { return _fileName; }
                }

                public IQueryable Rows
                {
                    get { return _rows; }
                }



                public ExcelResult(string data, string fileName)
                {
                    _fileName = fileName;
                    _data = data;
                }

                public override void ExecuteResult(ControllerContext context)
                {
                    WriteFile(_fileName, "application/ms-excel", _data);            
                }


                private string ReplaceSpecialCharacters(string value)
                {
                    value = value.Replace("’", "'");
                    value = value.Replace("“", "\"");
                    value = value.Replace("”", "\"");
                    value = value.Replace("–", "-");
                    value = value.Replace("…", "...");
                    return value;
                }

                private void WriteFile(string fileName, string contentType, string content)
                {
                    HttpContext context = HttpContext.Current;
                    context.Response.Clear();
                    context.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
                    context.Response.Charset = "";
                    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    context.Response.ContentType = contentType;
                    context.Response.Write(content);
                    context.Response.End();
                }
            }

Вы можете использовать этот пример для генерации HTML в слово. PDF - это совсем другое дело.

person Max Lambertini    schedule 17.08.2012