首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义Excel导出操作

自定义Excel导出操作
EN

Stack Overflow用户
提问于 2011-02-24 04:00:52
回答 1查看 795关注 0票数 0
代码语言:javascript
复制
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);
        }
    }

我真的很困惑如何在我的控制器中使用这个动作。这是我从互联网上得到的,但我只是很难弄清楚如何在我的控制器中定义它,如何将数据传递给它,并从AJAX调用中获取数据。

任何帮助都是很棒的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-24 15:12:37

与所有操作结果一样,您将从操作中返回它们:

代码语言:javascript
复制
public ActionResult Foo()
{
    SomeViewModel model = ...
    return new ExcelResult<SomeViewModel>
    (
        ControllerContext,
        "~/Views/Home/Foo.ascx",
        "Foo.xlsx",
        model
    );
}

在本例中,Foo partial被强类型化为视图模型并包含数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5096370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档