我现在能够确认我的ASPX页面中只包含有一个:<Form runat="server">在CS文件里有以下代码:
Response.Clear(); 
Response.Buffer= true; 
Response.Charset="gb2312";
//下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开
//filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc || .xls || .txt ||.htm
Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312");
//Response.ContentType指定文件类型 可以为application/ms-excel || application/ms-word || application/ms-txt || application/ms-html || 或其他浏览器可直接支持文档
Response.ContentType = "application/ms-excel";
this.EnableViewState = false; 
  //二、定义一个输入流
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
oStringWriter.WriteLine("联系人姓名,手机号码);
SqlDataReader dr = DBHelper.ExecuteReader(sql);
while (dr.Read())
{
    oStringWriter.WriteLine(dr["zhName"].ToString() + "," + dr["mobile"].ToString() 

System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); //就是下面这一行,只要在这里设置断点(Response.End())
,页面上就可以弹出保存窗口.this.RenderControl(oHtmlTextWriter);//在这里设置断点(Response.End()),就会出现
//System.Web.HttpException: 一页只能有一个服务器端 Form 标记 错误Response.Write(oStringWriter.ToString());
Response.End(); 

解决方案 »

  1.   

    我现在能够确认我的ASPX页面中只包含有一个:<Form runat="server">
    可是运行出现以下错误:
    System.Web.HttpException: 一页只能有一个服务器端 Form 标记
    CS代码:
    Response.Clear(); 
    Response.Buffer= true; 
    Response.Charset="gb2312";
    Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls");
    Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312");
    Response.ContentType = "application/ms-excel";
    this.EnableViewState = false; 
    System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
    oStringWriter.WriteLine("联系人姓名,手机号码);
    SqlDataReader dr = DBHelper.ExecuteReader(sql);
    while (dr.Read())
    {
        oStringWriter.WriteLine(dr["zhName"].ToString() + "," + dr["mobile"].ToString() 

    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); //就是下面这一行,只要在这里设置断点(Response.End()),页面上就可以弹出保存窗口,也就是说不会出错错误.this.RenderControl(oHtmlTextWriter);//在这里设置断点(Response.End()),就会出现
    //System.Web.HttpException: 一页只能有一个服务器端 Form 标记 错误Response.Write(oStringWriter.ToString());
    Response.End(); 
      

  2.   

    oHtmlTextWriter并没有涉及到控件,要这句的含义是什么this.RenderControl(oHtmlTextWriter);
      

  3.   

    我用的是类.DBHelper.我试一下.关闭数据库链接.
      

  4.   

    你加的控件中有runat=server 的form,解决方法错误页面上应该有。在<@page标签下加  validateRequest=false 应该就OK了
      

  5.   

    Response.Charset = "GB2312"; 
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
    string lsHeader;
    Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode("Excel.xls",Encoding.UTF8).ToString()); 
    Response.ContentType = "application/ms-excel"; 
    this.EnableViewState =false; 
    lsHeader="";
    for(int k=0;k<=dt.Columns.Count - 1;k++)
    {
    lsHeader=lsHeader+dt.Columns[k].ColumnName+"\t";
    }
    lsHeader=lsHeader+"\n";
    for(int i=0;i<=dt.Rows.Count - 1;i++)
    {
    for(int j=0;j<=dt.Columns.Count - 1;j++)
    {
    lsHeader=lsHeader+(dt.Rows[i][j].ToString().Replace("\r","")).Replace("\n","")+"\t";
    }
    lsHeader=lsHeader+"\n";
    }
    Response.Write(lsHeader); 
    Response.End(); 
    ------------
    以上是我保存为EXCEL的代码,楼主试试
      

  6.   

    以下代码成功.谢谢楼上的各位!
            HttpResponse resp;
                resp = Page.Response;
                resp.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 
                resp.AppendHeader("Content-Disposition", "attachment;filename=filename.xls");
                Response.ContentType = "application/text/csv";            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
                oStringWriter.WriteLine("联系人姓名,手机号码,电子邮件,公司,职位");
                resp.Write(oStringWriter);
                resp.End();