Экспорт в Excel работает в Firefox, но не в IE - PullRequest
0 голосов
/ 28 февраля 2011

В моем приложении MVC есть функция экспорта в Excel.Как это работает, я использую эту строку:

window.open((actionUrl + "?id=" + guid + "&viewName=" + viewUrl + "&fileName="  + fileName), null, null, null);

Это позволяет мне передавать все мои параметры в действие MVC через URL.Действие выглядит следующим образом:

public ActionResult ExportToExcel(Guid? id, string viewName, string fileName)
        {
            IndicationBase indication = CachedTransactionManager<IndicationBase>.GetCachedTransactions(id.Value);
            return new ExcelResult<Chatham.Web.Models.Indications.ModelBase>
            (
                ControllerContext,
                viewName,
                fileName,
                indication.Model
            );
        }

Затем вызывается результат Excel, который выглядит следующим образом:

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()
        {
            using (var writer = new StringWriter())
            {
                var view = new WebFormView(_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(content);
            context.Response.End();
        }

        public override void ExecuteResult(ControllerContext context)
        {
            string content = this.RenderViewToString();
            this.WriteFile(content);
        }
    }

Все это работает в Firefox, но не в IE.Может ли это быть что-то с заголовками ответа?Это было мое первое предположение, но я даже не знаю, с чего начать искать что-то не так.

Ошибка, которая возвращается из IE, такова: enter image description here

Любая помощь будет в значительной степениоценили.Спасибо!

1 Ответ

2 голосов
/ 01 марта 2011

Не устанавливать

context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

в IE.

...