2016-07-15 10 views
4

私はマスターページと2つのWebページWebForm1とWebForm2を持っています。マスターページには、WebForm1またはWebForm2に行くために2つのLinkBut​​tonがあります。ページを終了するときPage_Loadが呼び出されます

WebForm1に移動するLinkBut​​tonをクリックすると、WebForm1のPage_Loadイベントハンドラが呼び出され、Page.IsPostBack == falseが呼び出されます。ここまでは順調ですね。

それから私は、この問題が発生したWebForm2に行くためにクリックしたとき:

a) The Page_Load event handler for WebForm1 is called again and Page.IsPostBack == true. 
b) Then the Page_Load event handler for WebForm2 is called and its Page_Load == false. 

Vice versa when going back to WebForm1. 

を私はWebForm2に行くよときWebForm1に用をPage_Loadと呼ばれるのはなぜ?私はWebForm1ではなくWebForm2をロードしています。

すべてのページ:AutoEventWireup = "true"あなたが見ている何

<form id="form1" runat="server"> 
<div> 
    <p>This is MySite.Master.</p> 
    <p> 
     <asp:LinkButton ID="goto1" runat="server" OnClick="goto1_Click">Go To WebForm1</asp:LinkButton> 
    </p> 
    <p> 
     <asp:LinkButton ID="goto2" runat="server" OnClick="goto2_Click">Go To WebForm2</asp:LinkButton> 
    </p> 

    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
    </asp:ContentPlaceHolder> 
</div> 
</form> 


protected void goto1_Click(object sender, EventArgs e) { 
    Response.Redirect("WebForm1.aspx"); 
} 

protected void goto2_Click(object sender, EventArgs e) { 
    Response.Redirect("WebForm2.aspx"); 
} 



public partial class WebForm1 : System.Web.UI.Page { 
    protected void Page_Load(object sender, EventArgs e) { 

     if (Page.IsPostBack) { 

     } 
    } 
} 



public partial class WebForm2 : System.Web.UI.Page { 
    protected void Page_Load(object sender, EventArgs e) { 

     if (Page.IsPostBack) { 

     } 
    } 
} 
+2

asp.netボタンの働き方です。それらはページのポストバックを引き起こします。そのため、page_loadが再びヒットします。クリックハンドラが起動します。 –

+0

@ S.Akbari以下の回答を参照してください –

答えて

2

は、あなただけですべての LinkButtonを使用していない、別のページへの単純なリンクをしたいときは...カークの答えにに追加します。 LinkButtonは送信ボタンにすぎず、リンクのように表示されています。これは、ASP.NETが自動的に構築するjavascriptを通して魔法のように繋がっています。

あなたは単純に通常のHTMLでそれを行う、別のページにあなたを送信するためにリンクしたい場合:

<a href="WebForm2.aspx">Go To WebForm2</a> 
+0

私は

4

goto1またはgoto2をクリックするとページは、ページのライフサイクルを、次のポストバックを行うことを引き起こしているということです。この場合、それは、マスターページとコンテンツページの両方を含む。

このために便利ですカップルのリンクが関与マスターページで特に

ASP.NET Page Life Cycle Overview

MasterPage and Content Page life cycle

あり、これらはイベント

  1. コンテンツページの順序ですPreInitイベント。
  2. マスターページコントロールイベント。
  3. コンテンツコントロールイベント。
  4. マスターページイベント。
  5. コンテンツページイベント。
  6. コンテンツページロードイベント。
  7. マスターページロードイベント。
  8. マスターページコントロールロードイベント。
  9. コンテンツページコントロール負荷イベント。
  10. コンテンツページPreRenderイベント。
  11. マスターページプレレンダーイベント。
  12. マスターページコントロールPreRenderイベント。
  13. コンテンツページコントロールPreRenderイベント。
  14. マスターページコントロールアンロードイベント。
  15. コンテンツページコントロールアンロードイベント。
  16. マスターページアンロードイベント。
  17. コンテンツページアンロードイベント。

これらはポストバックに起こると、あなたのPage_LoadイベントがClickイベントのために発射されている理由である

コンテンツページロードイベント

が表示されます原因となるのはです。ポストバックであり、フルライフサイクルはexeです

Response.Redirect("WebForm2.aspx"); 

実行する前WebForm1にためcuted。