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了。

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

  • 相关阅读:
    bootstrap 学习笔记
    js 学习笔记 -- webpack 简介
    js 学习笔记 -- webapi
    js 学习笔记 -- js基础知识
    css学习笔记二--IFC
    css 学习笔记一
    vim学习笔记
    Linux 网络命令
    Java中循环冗余校验(CRC32)的实现
    Tomcat8启动报there was insufficient free space available after evicting expired cache entries
  • 原文地址:https://www.cnblogs.com/wonder223/p/6518595.html
Copyright © 2011-2022 走看看