0

私はこのプログラムをasp.netに持っています

<body>
    <form id="form1" runat="server">
      <div>    
         <asp:Button runat ="server" ID="btnTest" Text ="Request Somethig"   
         OnClick ="OnClick" />
       </div>
    </form>
</body>

そして背後にあるコード:

public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (IsPostBack)
    Response.Write("A Post Back has been sent from server");
   }

protected void OnClick(object sender, EventArgs e)
{          
   //The button has AutoPostBack by default
 }  

}

サーバーhttp://localhost:50078/Default.aspxにページを要求すると、 サーバーはクラス _Default.cs のインスタンスを作成し、それが起動して Page_Load をイベントしますが、この行は実行されません。初めて:

Response.Write("A Post Back has been sent from server");

その理由は IsPostBack=false です

次に、ボタンをクリックすると、サーバーからのポスト バックが要求されるため、IsPostBack が true になり、ブラウザーにメッセージが表示されます。

"A Post Back has been sent from server"

私の質問は次のとおりです: IsPostBack プロパティが false から true に変更される方法と、その値を格納する場所はどこですか?

私が知る限り、サーバーがクラス _Default.cs から作成するインスタンスは、HTML がクライアントに送信されると破棄されるため、ボタンをクリックしたとき (ポストバックを行う) には IsPostBack プロパティについて何もないと思われます。 .

サーバーは IsPostback の値をページ自体の _VIEWSTATE 非表示変数に格納しますか?

前もって感謝します!!

4

1 に答える 1

2

IsPostBack はPage クラスのパブリック プロパティです。この質問に対する Daryal の回答は、そのクラスの構造を説明しています。

その答えから:

Page クラスは TemplateControl クラスから派生します。

public class Page : TemplateControl, IHttpHandler

TemplateControl クラスは抽象 Control クラスから派生します。

public abstract class TemplateControl : Control, ...

Page クラスの派生元である Control クラスには、Page という名前の仮想プロパティがあります。

// Summary:
//     Gets a reference to the System.Web.UI.Page instance that contains the server
//     control.
//
public virtual Page Page { get; set; }

Page クラスには、IsPostBack、IsValid などのプロパティがあります。

// Summary:
//     Gets a value that indicates whether the page is being rendered for the first
//     time or is being loaded in response to a postback.
//        
public bool IsPostBack { get; }
于 2016-06-17T20:20:20.187 に答える