Asp.net mvc 2 MVC for IE中的Excel导出不允许打开多个窗口

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

以下是从ActionResult继承的ExcelExport操作:

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或用户会话来确定用户已经在一个时间段内加载了导出,并更改文件在服务器端下载的电子邮件。这对我在搜索和邮寄两天后起了作用