C# 一个页面只能有一个服务器端表单标记错误

C# 一个页面只能有一个服务器端表单标记错误,c#,asp.net,C#,Asp.net,Aspx页面按要求提供 <%@ Page Title="" Language="C#" MasterPageFile="~/tier6a-educ.master" AutoEventWireup="true" EnableEventValidation="false" CodeFile="TAP_rubform_response.aspx.cs" Inherits="TAP_rubform_response" %> <asp:Content ID="Content1"

Aspx页面按要求提供

<%@ Page Title="" Language="C#" MasterPageFile="~/tier6a-educ.master" AutoEventWireup="true"
    EnableEventValidation="false" CodeFile="TAP_rubform_response.aspx.cs" Inherits="TAP_rubform_response" %>

<asp:Content ID="Content1" ContentPlaceHolderID="test1" runat="server">
    <head>
        <link href="StyleSheet.css" type="text/css" rel="Stylesheet" />
    </head>
    <div style="padding-left: 10pt">
        <form id="form1" runat="server">


        <asp:Table ID="Table11" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow10" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell10" runat="server" ColumnSpan="2"><h4>SECTION 1: STANDARDS AND OBJECTIVES</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table38" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow11" runat="server">
                <asp:TableCell ID="TableCell11" runat="server">
                    <asp:Label ID="Label22" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label23" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow34" runat="server">
                <asp:TableCell ID="TableCell44" runat="server">
                    <asp:Label ID="Label48" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label49" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table12" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow12" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell12" runat="server" ColumnSpan="2"><h4>SECTION 2: Presenting Instructional Content</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table2" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow13" runat="server">
                <asp:TableCell ID="TableCell15" runat="server">
                    <asp:Label ID="Label20" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label21" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow39" runat="server">
                <asp:TableCell ID="TableCell49" runat="server">
                    <asp:Label ID="Label58" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label59" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table13" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow14" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell13" runat="server" ColumnSpan="2"><h4>SECTION 3: Lesson Structure and Pacing</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table3" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow15" runat="server">
                <asp:TableCell ID="TableCell18" runat="server">
                    <asp:Label ID="Label24" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label25" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow35" runat="server">
                <asp:TableCell ID="TableCell45" runat="server">
                    <asp:Label ID="Label50" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label51" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table14" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow16" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell14" runat="server" ColumnSpan="2"><h4>SECTION 4: Activities and Materials </h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table4" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow17" runat="server">
                <asp:TableCell ID="TableCell21" runat="server">
                    <asp:Label ID="Label26" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label27" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow36" runat="server">
                <asp:TableCell ID="TableCell46" runat="server">
                    <asp:Label ID="Label52" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label53" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table21" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow18" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell16" runat="server" ColumnSpan="2"><h4>SECTION 5: Academic Feedback</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table5" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow19" runat="server">
                <asp:TableCell ID="TableCell24" runat="server">
                    <asp:Label ID="Label28" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label29" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow37" runat="server">
                <asp:TableCell ID="TableCell47" runat="server">
                    <asp:Label ID="Label54" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label55" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table26" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow20" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell59" runat="server" ColumnSpan="2"><h4>SECTION 6: Grouping Students</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table6" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow21" runat="server">
                <asp:TableCell ID="TableCell27" runat="server">
                    <asp:Label ID="Label30" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label31" Font-Bold="true" runat="server">    </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow38" runat="server">
                <asp:TableCell ID="TableCell48" runat="server">
                    <asp:Label ID="Label56" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label57" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table32" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow40" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell71" runat="server" ColumnSpan="2"><h4>SECTION 7: Teacher Content Knowledge</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table7" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow23" runat="server">
                <asp:TableCell ID="TableCell30" runat="server">
                    <asp:Label ID="Label32" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label33" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow24" runat="server">
                <asp:TableCell ID="TableCell31" runat="server">
                    <asp:Label ID="Label34" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label35" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table39" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow42" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell91" runat="server" ColumnSpan="2"><h4>SECTION 8: Questioning</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table8" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow26" runat="server">
                <asp:TableCell ID="TableCell34" runat="server">
                    <asp:Label ID="Label36" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label37" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow27" runat="server">
                <asp:TableCell ID="TableCell35" runat="server">
                    <asp:Label ID="Label38" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label39" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table45" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow50" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell105" runat="server" ColumnSpan="2"><h4>SECTION 9: Thinking</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table9" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow29" runat="server">
                <asp:TableCell ID="TableCell38" runat="server">
                    <asp:Label ID="Label40" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label41" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow30" runat="server">
                <asp:TableCell ID="TableCell39" runat="server">
                    <asp:Label ID="Label42" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label43" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table50" runat="server" Height="16px" Width="845px">
            <asp:TableRow ID="TableRow56" runat="server" orderColor="Gray" BorderWidth="1pt"
                BorderStyle="Dotted" HorizontalAlign="Center">
                <asp:TableCell ID="TableCell117" runat="server" ColumnSpan="2"><h4>SECTION 10: Problem Solving</h4></asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="table10" runat="server" HorizontalAlign="center" BorderColor="Gray"
            BorderWidth="1pt" BorderStyle="Dotted" Width="850px" Style="line-height: 15pt"
            Font-Names="Trebuchet MS" Font-Size="11pt">
            <asp:TableRow ID="TableRow32" runat="server">
                <asp:TableCell ID="TableCell42" runat="server">
                    <asp:Label ID="Label44" runat="server">Rating &nbsp;       </asp:Label>
                    <asp:Label ID="Label45" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow ID="TableRow33" runat="server">
                <asp:TableCell ID="TableCell43" runat="server">
                    <asp:Label ID="Label46" runat="server">Evidence &nbsp;       </asp:Label>
                    <asp:Label ID="Label47" Font-Bold="true" runat="server">   </asp:Label>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        <asp:Table ID="Table15" runat="server" BorderColor="Gray" BorderWidth="1pt" BorderStyle="Dotted"
            Width="850px" HorizontalAlign="Center">
            <asp:TableRow ID="TableRow48" runat="server">
                <asp:TableCell ID="TableCell101" HorizontalAlign="left" ColumnSpan="1" runat="server"
                    Font-Size="Large">
                    <asp:Button ID="Button1" Text="Send As e-Mail" runat="server" OnClick="SendAsEmail_Click"
                        Font-Size="10pt" Height="18pt" Width="90pt" ValidationGroup="onsubmit" />
                </asp:TableCell>
                <asp:TableCell ID="TableCell19" HorizontalAlign="center" ColumnSpan="1" runat="server"
                    Font-Size="Large">
                    <asp:Button ID="Button3" Text="Save As PDF" runat="server" OnClick="SaveAsPDF_Click"
                        Font-Size="10pt" Height="18pt" Width="90pt" ValidationGroup="onsubmit" />
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
        </form>
    </div>
</asp:Content>
我可以很好地接收电子邮件,但在执行页面后,会显示以下错误

我绝对相信页面中只有表单,因为如果上面函数的实现是空的,我不会得到任何错误。网页加载良好,单击按钮不起任何作用

一个页面只能有一个服务器端表单标签。

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.Web.HttpException:页面只能有一个服务器端表单标记

源错误:

在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别

堆栈跟踪:

[HttpException (0x80004005): A page can have only one server-side Form tag.]
   System.Web.UI.Page.OnFormRender() +8721176
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +33
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +32
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +51
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +40
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266
这个错误似乎是因为我正在调用函数
this.Page.RenderControl(hw)

有没有人对如何解决这个问题有经验


谢谢。

看起来您必须在页面上禁用了
EventValidation
,否则您将获得一个
注册表,只有在呈现()期间才能调用EventValidation错误

看起来是这样的:页面被整体呈现到您的
htmltexwriter
,然后在呈现事件期间重新呈现,并在
响应中输出。这可能导致ASP看到两个表单标记并抛出错误。解决方案是覆盖页面的
Render
方法,捕获所需的html,将其发送到电子邮件中,并将html写入页面上显示的
响应

很好地描述了正在发生的事情以及如何覆盖
渲染

编辑:您应该能够调用
base.Render
并捕获输出以写入
响应以及您的电子邮件

在按钮单击中,设置一个布尔值,指示是否通过电子邮件发送页面:

public void myButton_Click(object sender, EventArgs e)
{
    okayToEmail = true;
}
然后,当覆盖render时,将页面呈现为一个新的
HtmlTextWriter
,将内容写入页面的
HtmlTextWriter
,并检查标志的值。如果为true,请通过电子邮件发送内容

protected override void Render(HtmlTextWriter writer)
{
    var sb = new StringBuilder();
    using (var sw = new StringWriter(sb))
    {
        using (var htw = new HtmlTextWriter(sw))
        {
            base.Render(htw);
            writer.Write(sb.ToString());

            if (okayToEmail)
            {
                using (var message = new MailMessage())
                {
                    message.Body = sb.ToString();
                    ...
                }
            }
        }
    }
}

但请记住:将整个页面写入电子邮件正文可能并不好。。。它将包括
Doctype
标记、
html
body
标记等,这些标记将被大多数(可能是所有)电子邮件客户端删除。此外,链接样式表将不起作用,我相信大多数电子邮件客户端都会删除嵌入的样式表。

有一种标准方法可以截取和处理发送到浏览器的响应。
如果您希望接收此响应并对其进行处理,则应使用

UpperCaseFilter
类,一个自定义流类,将通过它的所有文本转换为大写


Asp.net将调用流的
Write
方法。您需要在stream类内部执行一些缓冲,因为它可能会以块的形式接收数据。

为什么要调用
this.Page.RenderControl(hw)?这样我就可以将页面的内容放入变量hw(和变量sw间接地)以复制到消息中。Body=sw.ToString();你可以在这里发布你的.aspx代码吗?@emmanuel-n:我已经发布了aspx代码,也许他应该创建一个新的WebRequest来获取所需的HTML?或者使用Server.Execute()。而不是覆盖渲染。。。看起来这可能会有一些负面的副作用;这不是一个只有ASP.NET主机才应该调用的方法吗?我尝试了您发布的链接中的解决方案,但仍然得到相同的错误。guy使用的重写函数是这个受保护的重写void Render(HtmlTextWriter writer){if(okToSendMarkup)SendRenderedMarkup();base.Render(writer);},因此,当我收到错误时,它仍然调用base.Render()。请检查我的编辑。我假设您的
sendrendedmarkup
方法重新呈现了导致您的问题的页面。我的上述编辑工作为我。
protected override void Render(HtmlTextWriter writer)
{
    var sb = new StringBuilder();
    using (var sw = new StringWriter(sb))
    {
        using (var htw = new HtmlTextWriter(sw))
        {
            base.Render(htw);
            writer.Write(sb.ToString());

            if (okayToEmail)
            {
                using (var message = new MailMessage())
                {
                    message.Body = sb.ToString();
                    ...
                }
            }
        }
    }
}
private void Page_Load(object sender, EventArgs e)
{

  // Filter the text to be rendered as all uppercase.
  Response.Filter = new UpperCaseFilterStream(Response.Filter);
}