3

要求された 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 ページは正常に読み込まれ、ボタンをクリックしても何も起こりません。

ページには、サーバー側の Form タグを 1 つだけ含めることができます。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Web.HttpException: ページには、サーバー側の Form タグを 1 つだけ含めることができます。

ソース エラー:

現在の 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);

この問題を解決する方法について経験のある人はいますか?

ありがとうございました。

4

2 に答える 2

3

EventValidationページで無効にする必要があるように見えます。そうしないと、RegisterForEventValidation can only be called during Render();エラーが発生します。

発生しているように見えるのは、ページ全体が にHtmlTextWriterレンダリングされ、Render イベント中に再レンダリングされて に出力されることResponseです。これにより、ASP が 2 つの Form タグを認識し、エラーが発生する可能性があります。解決策は、ページのメソッドをオーバーライドし、Render必要な html をキャプチャし、電子メールで送信し、ページに表示されるように html を書き込むことResponseです。

このリンクには、何が起こっているのか、どのようにオーバーライドするのかがよく説明されていますRender

base.Render編集:出力を呼び出してキャプチャしResponse、電子メールだけでなく、に書き込むことができるはずです。

ボタンのクリックで、ページを電子メールで送信するかどうかを示すブール値を設定します。

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また、リンクされたスタイルシートは機能しません。ほとんどの電子メール クライアントは、埋め込まれたスタイルシートを削除すると思います。

于 2012-09-04T21:29:59.893 に答える
1

ブラウザに送信された応答を傍受して処理する標準的な方法があります。
この応答を受信して​​処理する場合は、応答フィルターを使用する必要があります

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ストリームのメソッドを呼び出します。データをチャンクで受信する可能性があるため、ストリーム クラス内でバッファリングを行う必要があります。

于 2012-09-05T04:01:08.173 に答える