我在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的值?
提前致谢!!
答案 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; }