zoukankan      html  css  js  c++  java
  • 关于下载的问题

    昨天在做一个下载excel的需求,发现有些需要说明的地方。

    首先来个二话不说上代码:

    Response.Clear();
                Response.BufferOutput = true;
                string fileName = "123.xls";
                //设定输出的字符集 
                Response.Charset = "GB2312";
                //假定导出的文件名为FileName.xls 
                Response.AppendHeader("Content-Disposition", "attachment;filename= " + fileName);
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //设置导出文件的格式 
                Response.ContentType = "application/ms-excel";
                //关闭ViewState 
                EnableViewState = false;
                System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
                System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
                System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
    
                //DataTable dt = new DataTable();
    
                //DataGrid excel = new DataGrid();
                //excel.DataSource = dt.DefaultView;
                //excel.DataBind();
                //excel.RenderControl(textWriter);
    
                textWriter.Write("<table><tr><th>1.1</th><th>1.2</th><th>1.3</th><th>1.4<th></tr>");
                textWriter.Write("<tr><td>2.1</td><td>2.2</td><td>2.3</td><td>2.4</td></tr>");
                textWriter.Write("<tr><td>3.1</td><td><table><th>3.2.1</th><td>3.2.2</td></tr>"+
                    "<tr><td>3.2.3</td><td>3.2.4</td></tr></table></td><td>3.3</td><td>"+
                    "<table><tr><td>1.1</td><td>1.2</td></tr><tr><td>2.1</td><td>2.2</td></tr><tr><td>2.1</td><td>2.2</td></tr></table>"
                    + "</td></tr></table>");
    
                //把HTML写回浏览器
                //解决第一位字符为零时不显示的问题和条码被认定为数字问题。
                Response.Write("<head><style>table td,th{text-align: center;} table th{color:red;background-color:blue}</style></head>");
                Response.Write(stringWriter.ToString());
                Response.End();

    大家可以看到,这个里面有2个点:

        1)只要你正确地组织正确的HTML table元素,excel就可以自动给你表中套表,强大到令人无话可说了。

        2)可以使用css设定Excel中格子的样式。

    再来说说我遇到的坑,我在自己机器上新建的测试很快乐地测试下载excel,可是将这个代码Copy到大工程中,怎么就“System.WebForms.PageRequestManagerParserErrorException:

    The message received from the server could not be parsed.Commond causes for this error are when the response is modified by calls to Response.Write(),

    response filters,HttpModules ,or server traceis enabled. Details: Error parsing near '<head><style>table t'.".

    首先是怀疑自己的程序,再在本机测试,还是正确的,放到大工程中,还是出错。

    将中间输出的部分,改简单点,不行。将“<head>"标签去掉,不行。改语言,还是不行。

    专业的程序员是还的baidu er,将使用baidu去搜索,发现有个文章说到"如果调用Response.Write()方法的服务器控件在使用UpdatePanel的页面,则只需要在UpdatePanel下增加一个<Triggers>节点,通过PostBackTrigger注册一下改控件就可以了."

    下面还有说明具体怎么做,也就是将控件ID放到asp:PostBackTrigger中去   <asp:PostBackTrigger ControlID="Button2" /> <!--Button2就是下面那个需要在Button2_Click事件里使用Response.Write()的按钮ID-->  </Triggers>  就OK了。

    按照他指导的方法做了一下,果然就出来了。 

  • 相关阅读:
    hdu 4117 GRE Words (ac自动机 线段树 dp)
    IT段子,娱乐一下
    makefile 必知必会
    实现跳转到“微信公众账号”并打开添加某个固定微信用户为好友的页面(接口被封了,已经不可用)
    zxing 二维码扫描 配置和使用
    iOS $299刀企业证书申请的过程以及细节补充
    iOS设备的越狱方法
    iOS开发中 workspace 与 static lib 工程的联合使用
    ios如何在当前工程中添加编辑新建的FramesWork
    软件项目版本号的命名规则及格式
  • 原文地址:https://www.cnblogs.com/wonder223/p/6518595.html
Copyright © 2011-2022 走看看