Asp.net mvc 2 MVC for IE中的Excel导出不允许打开多个窗口
以下是从ActionResult继承的ExcelExport操作:Asp.net mvc 2 MVC for IE中的Excel导出不允许打开多个窗口,asp.net-mvc-2,internet-explorer-8,export-to-excel,Asp.net Mvc 2,Internet Explorer 8,Export To Excel,以下是从ActionResult继承的ExcelExport操作: public class ExcelResult<Model> : ActionResult { string _fileName; string _viewPath; Model _model; ControllerContext _context; public ExcelResult(ControllerContext c
public class ExcelResult<Model> : ActionResult
{
string _fileName;
string _viewPath;
Model _model;
ControllerContext _context;
public ExcelResult(ControllerContext context, string viewPath, string fileName, Model model)
{
this._context = context;
this._fileName = fileName;
this._viewPath = viewPath;
this._model = model;
}
protected string RenderViewToString()
{
if (!_viewPath.EndsWith(".aspx"))
{
return _viewPath;
}
using (var writer = new StringWriter())
{
var view = new WebFormView(_context, _viewPath);
var vdd = new ViewDataDictionary<Model>(_model);
var viewCxt = new ViewContext(_context, view, vdd, new TempDataDictionary(), writer);
viewCxt.View.Render(viewCxt, writer);
return writer.ToString();
}
}
void WriteFile(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 = "application/ms-excel";
context.Response.Write(RemoveImages(content));
context.Response.End();
}
public override void ExecuteResult(ControllerContext context)
{
string content = this.RenderViewToString();
this.WriteFile(content);
}
public static string RemoveImages(string html)
{
StringBuilder retval = new StringBuilder();
using (StringReader reader = new StringReader(html))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if (line != null)
{
if (!line.StartsWith("<img"))
{
retval.Append(line);
}
}
} while (line != null);
}
return retval.ToString();
}
}
公共类ExcelResult:ActionResult
{
字符串_文件名;
字符串_viewPath;
模型(u)模型,;
ControllerContext\u上下文;
public ExcelResult(ControllerContext上下文、字符串视图路径、字符串文件名、模型)
{
这._context=context;
此文件名为;
这是。_viewPath=viewPath;
这个._model=model;
}
受保护的字符串RenderViewToString()
{
如果(!\u viewPath.EndsWith(“.aspx”))
{
返回视图路径;
}
使用(var writer=new StringWriter())
{
var view=新的WebFormView(_上下文,_视图路径);
var vdd=新的ViewDataDictionary(_模型);
var viewCxt=newviewcontext(_context,view,vdd,new TempDataDictionary(),writer);
viewCxt.View.Render(viewCxt,writer);
返回writer.ToString();
}
}
void WriteFile(字符串内容)
{
HttpContext=HttpContext.Current;
context.Response.Clear();
context.Response.AddHeader(“内容处置”、“附件;文件名=\”+\u文件名+“\”);
context.Response.Charset=“”;
//context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.ContentType=“应用程序/ms excel”;
context.Response.Write(RemoveImages(content));
context.Response.End();
}
公共覆盖无效ExecuteSult(ControllerContext上下文)
{
字符串内容=this.RenderViewToString();
此.WriteFile(内容);
}
公共静态字符串移除图像(字符串html)
{
StringBuilder retval=新建StringBuilder();
使用(StringReader=new StringReader(html))
{
string line=string.Empty;
做
{
line=reader.ReadLine();
如果(行!=null)
{
如果(!line.StartsWith)("我也遇到了同样的问题,开箱即用,你不能做任何事情,因为IE和Excel就是这样处理的。你也不能确定已经打开了同名文件。但是你可以使用JavaScript或用户会话来确定用户已经在一个时间段内加载了导出,并更改文件在服务器端下载的电子邮件。这对我在搜索和邮寄两天后起了作用