我用Page.RenderControl获取当前页面的HTML源码,却总是报“一页只能有一个服务器端 Form 标记”的错误,在网上找了很多资料,试了很多种方法都没有解决。无奈之下只有在网上求救了,有哪位高手能帮我,在下感激不尽,可是我没有多少分呢,分虽少也是一点心意,希望不要介意。

解决方案 »

  1.   

    Form标记是大于一个
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    Page page = new Page();
    page.RenderControl(htw);
      

  2.   

    其实服务器端form标记是可以有多个的,
    但是那样的前提是只显示一个,其他的隐藏。
      

  3.   

    Form标记可以有多个,但有runat="server" 属性的Form标记只能有一个
      

  4.   

    你的页面上有多个form吧~~
    或者是你用的母版或是用户控件有form 仔细检查下~~
    没用的删掉 就行
      

  5.   

    可是HTML源码只有一个Form呢,我按一楼说的用Page page = new Page(); 
    page.RenderControl(htw); 这个page没有RenderControl的方法。
      

  6.   

    我知道只能有一个Form有runat="server" 属性,可是我实在找不出怎么会多了一个,我把代码贴出来,望哪位能帮我看看是哪里出了问题。谢谢!!!我在页面上放了一个Button,在他的Click事件
    {
          StringWriter stringWriter = new StringWriter();
          HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
          if (Visible) 
          {
                this.Page.RenderControl(htmlWriter);
          }
          html = stringWriter.GetStringBuilder().ToString();
          string exportDir = HttpContext.Current.Server.MapPath(".") + "\\vou\\";
          string exportServerPath = exportDir + "vou.doc";
          StreamWriter sw = new StreamWriter(exportServerPath, false);
          sw.Write(html);
          sw.Close();
          sw.Dispose();
           //将文件输出到客户端
           System.IO.FileInfo fileInfo = new System.IO.FileInfo(exportDir);
          HttpResponse resp;
          resp = Page.Response;          
          resp.Clear();
          resp.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode(exportDir));
          resp.AddHeader("content-length", fileInfo.Length.ToString());
          resp.ContentType = "application/octet-stream";
          resp.ContentEncoding = System.Text.Encoding.Default;
          resp.WriteFile(exportServerPath);
          resp.End();
          resp.Close();
    }
      

  7.   

    我用          string URL = Request.Url.ToString();
                HttpWebRequest WRq = (HttpWebRequest)WebRequest.Create(@URL);
                HttpWebResponse WRs = (HttpWebResponse)WRq.GetResponse();
                Stream S = WRs.GetResponseStream();
                StreamReader R = new StreamReader(S, System.Text.Encoding.UTF8);
                string Str = R.ReadToEnd();
                Response.Write(Str);  
    替代          this.Page.RenderControl(htmlWriter); 就不会出现那个问题了,虽然把问题解决了,可是之前的方法为什么会报错误还是没有找到方案。