public class ExcelResult : ActionResult 
    {
        public ExcelResult(StringBuilder b, string fileName)
        {
            this.b = b;
            this.FileName = fileName;
        }        public StringBuilder b
        {
            get;
            set;
        }        public string FileName
        {
            get;
            set;
        }        public override void ExecuteResult(ControllerContext context)
        {
            SetResponse(context);
        }        /// <summary>
        /// 设置并向客户端发送请求响应。
        /// </summary>
        /// <param name="context"></param>
        private void SetResponse(ControllerContext context)
        {
            byte[] bytestr = Encoding.Unicode.GetBytes(b.ToString());
            context.HttpContext.Response.Clear();
            context.HttpContext.Response.ClearContent();
            context.HttpContext.Response.Buffer = true;
            context.HttpContext.Response.Charset = "gb2312";
            context.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            context.HttpContext.Response.ContentType = "application/ms-excel";
            context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8) + ".xls");
            context.HttpContext.Response.AddHeader("Content-Length", bytestr.Length.ToString());
            context.HttpContext.Response.Write(b);
            context.HttpContext.Response.End();
        }     
    }采用asp.net mvc框架,这是导出EXCEL的Action返回类。求解。。多谢。

解决方案 »

  1.   

    贴的代码吧 参考  睡觉了  
     /// <summary>
        /// 导出到Execl
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnIpt_Click(object sender, EventArgs e)
        {
            //调用GExport方法 必须要结合 VerifyRenderingInServerForm方法 一起使用
            Export("application/ms-excel", "员工导出信息表.xls");
        }
        private void Export(string FileType, string FileName)
        { 
            Response.Clear();
            Response.Buffer = true;        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); // 中文    
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.UnicodeEncoding.UTF8).ToString());        //Response.ContentEncoding = System.Text.Encoding.UTF7;    
            Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。    
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            this.GridView2.RenderControl(oHtmlTextWriter);
            Response.Output.Write(oStringWriter.ToString());
            Response.Flush();
            Response.End();
        }
        //这个方法是配合导出Excel功能,内容不用写       
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
      

  2.   

    貌似不行哦。aspnet,network,network service,everyone用户权限全开最大了。。
      

  3.   

    怎么个没反应法?是不是到处excel时只是闪一下下载框就没反应了?如果是的话加入下面的方法:   public override void VerifyRenderingInServerForm(Control control)//必须有这个方法
        {    }
      

  4.   

    这个导出在本地是可以的,但是部署在服务器上就不行了。还有C# code
       public override void VerifyRenderingInServerForm(Control control)//必须有这个方法
        {    }
    这个是采用WebForm方式的,在MVC里面没有使用这种方式。。
      

  5.   


    这个方法是在WebForm里面用的吧。我现在采用的是MVC框架。。
    我一点导出,页面就一直在请求,等一会页面就报 无法显示网页的错了  。求助啊
      

  6.   

     public ActionResult ExportDrugListExcel()
            {
                StringBuilder b = new StringBuilder();
                b.Append("药品商品名称\t");
                b.Append("药品通用名称\t");
                b.Append("批准文号\t");
                b.Append("剂型\t");
                b.Append("规格\t");
                b.Append("药品分类\t");
                b.Append("认证时间\t");
                b.Append("认证机构\t\n");            String spmc = WebUtils.Cast.String(Request["Spmc"], "");
                String eType = WebUtils.Cast.String(Request["eType"], "");
                String drugType = WebUtils.Cast.String(Request["drugType"], "");
                int corpId = WebUtils.Cast.Int(Request["corpId"], 0);
                int pageSize = WebUtils.Cast.Int(Request["pageSize"], 15);
                int pageIndex = WebUtils.Cast.Int(Request["page"], 1);
                Sysadmin admin = GetSysadmin(corpId);            int total = 0;
                IList<Credit_drug> list = Credit_drugService.GetList(out total, pageSize, pageIndex, admin.Id, spmc, drugType);
                for (int i = 0; i < list.Count; i++)
                {
                    b.Append(list[i].Spmc + "\t");
                    b.Append(list[i].Tymc + "\t");
                    b.Append(list[i].Pzwh + "\t");
                    b.Append(list[i].Jx + "\t");
                    b.Append(list[i].Gg + "\t");
                    b.Append(list[i].DrugSortDict.TypeName + "\t");
                    b.Append(list[i].Rzsj + "\t");
                    b.Append(list[i].Rzjg + "\t\n");
                }
                return new ExcelResult(b, admin.UserName );
            }这是调用的代码。下面的是继承的返回Action通用导出EXCEL类
     public class ExcelResult : ActionResult 
        {
            public ExcelResult(StringBuilder b, string fileName)
            {
                this.b = b;
                this.FileName = fileName;
            }        public StringBuilder b
            {
                get;
                set;
            }        public string FileName
            {
                get;
                set;
            }        public override void ExecuteResult(ControllerContext context)
            {
                SetResponse(context);
            }        /// <summary>
            /// 设置并向客户端发送请求响应。
            /// </summary>
            /// <param name="context"></param>
            private void SetResponse(ControllerContext context)
            {
                byte[] bytestr = Encoding.Unicode.GetBytes(b.ToString());
                context.HttpContext.Response.Clear();
                context.HttpContext.Response.ClearContent();
                context.HttpContext.Response.Buffer = true;
                context.HttpContext.Response.Charset = "gb2312";
                context.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                context.HttpContext.Response.ContentType = "application/ms-excel";
                context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8) + ".xls");
                context.HttpContext.Response.AddHeader("Content-Length", bytestr.Length.ToString());
                context.HttpContext.Response.Write(b);
                context.HttpContext.Response.End();
            }     
        }