我想在我的 MVC 应用程序中向用户显示一个另存为对话框,并允许他以 pdf 或 word 格式保存一些 HTML 报告。为此,我是否需要在服务器端使用文件流和 IO 功能?还是在 JQuery 级别本身有可能?
我在网上找到了一些参考资料,例如添加响应标头 Content-Disposition,但不知道如何应用它。你能建议一些选择吗?
我想在我的 MVC 应用程序中向用户显示一个另存为对话框,并允许他以 pdf 或 word 格式保存一些 HTML 报告。为此,我是否需要在服务器端使用文件流和 IO 功能?还是在 JQuery 级别本身有可能?
我在网上找到了一些参考资料,例如添加响应标头 Content-Disposition,但不知道如何应用它。你能建议一些选择吗?
您必须创建一个后代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 是另一回事。