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

时间:2012-09-04 20:55:28

标签: 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" 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>

我有一个aspx页面,里面有一个按钮,当用户点击页面时,它会以电子邮件的形式发送给用户。

这是我为按钮的点击功能编写的代码

protected void SendasEmail_Click(object sender, EventArgs e)
{
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    this.Page.RenderControl(hw);

    SmtpClient smtpClient = new SmtpClient();
    MailMessage message = new MailMessage();

    MailAddress fromAddress = new MailAddress("xxxxx");
    smtpClient.Host = "xxxxxxx";
    smtpClient.Port = 25;
    message.From = fromAddress;
    message.To.Add("xxxxxx");
    message.Subject = "The webpage is below";
    message.IsBodyHtml = true;
    message.Body = sw.ToString();        
    smtpClient.Send(message);
    }

我可以收到电子邮件,但在执行页面后,会显示以下错误。

我绝对只有页面内的表单,因为如果上面的函数的实现是空的,我不会得到任何错误。网页加载正常,单击按钮不会执行任何操作。

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

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

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

来源错误:

在执行当前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);

有没有人有过如何解决此问题的经验?

谢谢。

2 个答案:

答案 0 :(得分:3)

看起来您必须在页面上停用EventValidation,否则您将收到RegisterForEventValidation can only be called during Render();错误。

正在发生的事情是,页面正在全部呈现到HtmlTextWriter中,然后在Render事件期间重新呈现以在Response中输出。这可能导致ASP看到两个Form标签并抛出错误。解决方案是覆盖页面的Render方法,捕获所需的html,将其发送到电子邮件中,并将html写入要显示在页面上的Response

This link很好地描述了正在发生的事情以及如何覆盖Render

编辑:您应该可以致电base.Render并捕获输出以写入Response以及您的电子邮件。

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

public void myButton_Click(object sender, EventArgs e)
{
    okayToEmail = true;
}

然后当您覆盖渲染时,将页面渲染为新的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标记,htmlbody标记等将被大多数(可能是所有)电子邮件客户端剥离。此外,链接的样式表将无法使用,我相信大多数电子邮件客户端都会删除嵌入式样式表。

答案 1 :(得分:1)

有一种标准方法可以拦截和处理发送到浏览器的响应 如果您希望收到此回复并进行处理,则应使用Response filters

private void Page_Load(object sender, EventArgs e)
{

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

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

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