0

我想在我的 MVC 应用程序中向用户显示一个另存为对话框,并允许他以 pdf 或 word 格式保存一些 HTML 报告。为此,我是否需要在服务器端使用文件流和 IO 功能?还是在 JQuery 级别本身有可能?

我在网上找到了一些参考资料,例如添加响应标头 Content-Disposition,但不知道如何应用它。你能建议一些选择吗?

4

1 回答 1

0

您必须创建一个后代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();
                }
            }

您可以使用此示例为 word 生成 HTML。PDF 是另一回事。

于 2012-08-17T04:45:08.640 回答