[100分求解]A page can have only one server-side Form tag. 异常

yjdn 2007-04-26 04:01:55
1.页面肯定只有一个form
2.一个页面,一个按钮,按钮里执行下面的代码:
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
this.RenderControl(wt);
string html = tw.ToString();

wt.Close();
tw.Close();


//然后报如下异常
A page can have only one server-side Form tag.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: A page can have only one server-side Form tag.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[HttpException (0x80004005): A page can have only one server-side Form tag.]
System.Web.UI.Page.OnFormRender(HtmlTextWriter writer, String formUniqueID)
System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
System.Web.UI.Control.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.Page.ProcessRequestMain()


...全文
311 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpp2017 2007-04-26
  • 打赏
  • 举报
回复
Response.Redirect("***.aspx"); == 默认是结束当前页面的。
yjdn 2007-04-26
  • 打赏
  • 举报
回复
再确认一下:
由于我在其它页面也有这一段代码,没有报这个错,
我检查了一下,其它页面最后用Response.Redirect("***.aspx");
进行了跳转,这一句也就意味着当前面不再Render,所以不再报那个异常,对吧?
孟子E章 2007-04-26
  • 打赏
  • 举报
回复
Render就是展现,虽然没有展现到页面
viena 2007-04-26
  • 打赏
  • 举报
回复
晕,放到流中与在页面上输出有区别吗?
yjdn 2007-04-26
  • 打赏
  • 举报
回复
我想问一下,前一个Render,我只放到流中,并没有在页面上输出,为什么会报这样的错?
yjdn 2007-04-26
  • 打赏
  • 举报
回复
如cpp2017(慕白兄) 所言,等下给分
yjdn 2007-04-26
  • 打赏
  • 举报
回复
上面就是全部代码
cpp2017 2007-04-26
  • 打赏
  • 举报
回复
如果不加Response.End的话,跳过Form的render System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter wt = new HtmlTextWriter(tw); //this.RenderControl(wt); foreach(Control c in this.Controls) { if(c is HtmlForm) { foreach(Control c1 in c.Controls) { c1.RenderControl(wt); } }else c.RenderControl(wt); } string html = tw.ToString(); Response.Write(Server.HtmlEncode(html)); wt.Close(); tw.Close(); 注意要重写VerifyRenderingInServerForm方法 public override void VerifyRenderingInServerForm(Control control) { //base.VerifyRenderingInServerForm(control); 注释掉这里。 }
yjdn 2007-04-26
  • 打赏
  • 举报
回复
Aspx:
-------------------------------------------------------------------
<%@ Page language="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="MyWeb.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm8</title>
<meta content="Microsoft Visual Studio .NET 7.1" name=GENERATOR>
<meta content=C# name=CODE_LANGUAGE>
<meta content=JavaScript name=vs_defaultClientScript>
<meta content=http://schemas.microsoft.com/intellisense/ie5 name=vs_targetSchema>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id=Form1 method=post runat="server"><FONT face=宋体></FONT> <asp:button id=Button2 style="Z-INDEX: 105; LEFT: 88px; POSITION: absolute; TOP: 104px" runat="server" Text="Button"></asp:button>
</form>
</body>
</HTML>


----------------------------------
CS
_________________________________
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace MyWeb
{
/// <summary>
/// WebForm8 的摘要说明。
/// </summary>
public class WebForm8 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button2;

private void Page_Load(object sender, System.EventArgs e)
{

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion



private void Button2_Click(object sender, System.EventArgs e)
{
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
this.RenderControl(wt);

wt.Close();
tw.Close();
}
}
}
孟子E章 2007-04-26
  • 打赏
  • 举报
回复
是的,你REender了一个出来

Response.Clear();
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
this.RenderControl(wt);
string html = tw.ToString();

wt.Close();
tw.Close();
Response.End();
cpp2017 2007-04-26
  • 打赏
  • 举报
回复
System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter wt = new HtmlTextWriter(tw); this.RenderControl(wt); string html = tw.ToString(); Response.Write(Server.HtmlEncode(html)); wt.Close(); tw.Close(); Response.End();
cpp2017 2007-04-26
  • 打赏
  • 举报
回复
form控件不能render 两次。
WeekZero 2007-04-26
  • 打赏
  • 举报
回复
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
this.RenderControl(wt);
string html = tw.ToString();

wt.Close();
tw.Close();

取到的html 是做什么用的,把全部的代码帖出来

如果可以的话在这些的最后加Response.End();
leafsword_519 2007-04-26
  • 打赏
  • 举报
回复
沒有用戶控件,有自定義控件?
孟子E章 2007-04-26
  • 打赏
  • 举报
回复
计算机不会说谎,贴你的全部代码
yjdn 2007-04-26
  • 打赏
  • 举报
回复
再补充:
1)我的页面里没有用用户控件。
2)希望回帖的朋友自己试一下。
WeekZero 2007-04-26
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20021216/10/1264155.html

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧