2016-06-17 4 views
0

У меня есть эта программа в 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 = ложь

Тогда, если я ударил нажать на кнопку, я запросить пост обратно с сервера, так что теперь IsPostBack будет верно и в моем браузере я буду видеть сообщение

"A Post Back has been sent from server" 

Мой вопрос: как свойство IsPostBack изменено с false на true и где хранится это значение?

Насколько я знаю, экземпляр, созданный сервером из класса _Default.cs, уничтожается после отправки HTML-кода клиенту, поэтому он не должен иметь ничего о свойствах IsPostBack, когда я нажимаю кнопку (делая пост назад).

Хранит ли сервер значение IsPostback в скрытой переменной _VIEWSTATE на самой странице?

Спасибо заранее!

+0

Вы можете посмотреть по адресу: [Как IsPostBack технически работать] (http://stackoverflow.com/questions/5650580/how-does-ispostback-technically-work/5650663#5650663). – ConnorsFan

ответ

2

IsPostBack является общественным достоянием Page class. Ответ Дарьяла на this question объясняет структуру этого класса.

Из этого ответа:

класса Page производного от класса TemplateControl;

public class Page : TemplateControl, IHttpHandler 

и класс TemplateControl проистекает из абстрактного класса управления;

public abstract class TemplateControl : Control, ... 

В классе управления, из которого выполняется класс страницы, существует виртуальная собственность, называемая страницей;

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

В классе страницы есть такие свойства, как 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; }