2009-05-26 40 views
4

PageRoad()でIsPostBackをテストするたびに、投稿データがあるかどうかにかかわらずfalseが返されます。私の最初の反応は、runat = "server"タグがフォームまたは送信ボタンにないかどうかを確認することでした。ただし、これらはすべて追加されており、WriteEmail.aspxページはIsPostBackに対して常にfalseを返します。私はIsPostBackの代わりにIsCrossPagePostBackを使ってみました。IsPostBackは常にfalseを返します

ListInstructors.aspx:

<form runat="server" method="post" action="WriteEmail.aspx"> 
     ... 
     <input type="submit" id="writeEmail" value="Write Email" runat="server" /> 
</form> 

WriteEmail.aspx:!

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Response.Redirect("ListInstructors.aspx"); 
    } 
} 

答えて

13

ポスト=ポストバック。ポストバックはと同じページにポストバックするときです。フォーム上の操作は、新しいページに送信されています。

あなたがしていることは、WriteEmail.aspxページを使用してメッセージを送信してから、どこに戻ったかのようです。あなたはそこにテキストを集めるためのフォームを表示していません。それは非常に...古典的なASP - ish ...物事を処理する方法。

代わりに、別のクラスのクラスでメッセージを送信するために使用するコードを置き、必要に応じてクラスをApp_Codeフォルダに配置します。また、送信ボタンを<asp:button ... />に変更してください。ボタンのサーバーのClickイベントからコードを呼び出すだけで、ListInstructors.aspxページを離れることはありません。 MSDNから番号:あなたのコメントに応えて


... IButtonControlを実装して、ボタンコントロールのPostBackUrlプロパティにページのURLを割り当てることで、クロスページ要求を行いますインタフェース。

+0

はIsCrossPagePostBackはページにわたって記事のためにtrueを返すべきでしょうか? –

+0

前のページから参照されている場合のみ。このリンクをもう一度見てください。 http://www.alexthissen.nl/blogs/main/archive/2006/09/13/beware-the-iscrosspagepostback-property.aspx –

+0

私はいくつかを削除しましたより読みやすくするために私の質問のコードの。実際には、大量メールを書くことができる形式があります。アドバイスありがとう。しかし、リクエスト["writeEmail"](送信ボタン)をテストするとうまくいくはずです。しかし、私はIsCrossPagePostBackが何のために使われているか知りたいのはまだ興味があります。 –

2

IsPostBackは、フォームがWriteEmail.aspxページから送信されていないため、該当しません。同じページからフォームを送信すると、PostBackが発生します。 WriteEmail.aspxページからフォームを送信した場合はPostBackとなります。それは単なる投稿です。あなたは、このMSDNの参照が有用であることを見つけるかもしれない

http://msdn.microsoft.com/en-us/library/ms178141.aspx

関連する問題