存储属性IsPostBack的位置在哪里?在asp.net

时间:2016-06-17 20:04:44

标签: asp.net ispostback

我在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将是真的,在我的浏览器中我将看到消息

"A Post Back has been sent from server"

我的问题是:属性IsPostBack如何从false更改为true,以及存储值在哪里?

据我所知,一旦将HTML发送到客户端,服务器从类_Default.cs创建的实例就会被销毁,因此,当我单击按钮时,它假设没有任何关于IsPostBack属性的信息。回帖)。

服务器是否在页面本身的_VIEWSTATE隐藏变量中存储了IsPostback的值?

提前致谢!!

1 个答案:

答案 0 :(得分:2)

IsPostBack是Page class的公共属性。 Daryal对this question的回答解释了该课程的结构。

从那个答案:

Page类派生自TemplateControl类;

  <package id="Microsoft.Azure.Mobile.Client" version="2.0.1" targetFramework="monoandroid60" />
  <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.0.1" targetFramework="monoandroid60" />
  <package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid60" />
  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid60" />
  <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="monoandroid60" />
  <package id="modernhttpclient" version="2.4.2" targetFramework="monoandroid60" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="monoandroid60" />
  <package id="SQLitePCL" version="3.8.7.2" targetFramework="monoandroid60" />

和TemplateControl类派生自抽象Control类;

public class Page : TemplateControl, IHttpHandler

在Page类派生自的Control类中,有一个名为Page;

的虚拟属性
public abstract class TemplateControl : Control, ...

在Page类中有IsPostBack,IsValid等属性;

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