[英]ASP.net Page Life Cycle Problem
我了解ASP.net頁面生命周期,當我單擊按鈕時,它會首先重新加載頁面,然后為按鈕執行后面的代碼。 我的問題是如何獲得它,以便可以在此過程之前進行設置。 我試圖傳遞一個已單擊按鈕的變量,但是由於頁面生命周期的原因,它從未收到此消息。 我該怎么做才能確定是否已單擊了此按鈕,可能是我對此考慮過多,甚至想法不足。
頁面加載:
ImageButton btn = (ImageButton)(Page.FindControl("displayYImgBtn"));
if (btn != null)
{
string state = btn.CommandArgument;
if (state == "true")
{
search();
btn.CommandArgument = "false";
}
}
按鈕:
ImageButton btn = (ImageButton)(sender);
btn.CommandArgument = "true";
您總是可以直接檢查post變量。 如果單擊了提交按鈕,則它在Request.Form
集合中將具有一個值,如果不是回發或其他控件引起的回發,則不應顯示該值。
有多種解決此問題的方法。
Page_Load
代碼放在OnPreRender
。 這將在RaisePostBackEvent
之后發生,因此可以確保已處理任何按鈕的單擊。 請務必注意,根據您要在此處執行的操作,它可能不起作用。 在此類后續事件中,某些組件不接受某些屬性更改。 如果可行,這是推薦的方法。 我想這取決於您的Page_Load事件中發生了什么。
如果在page_load中設置了該變量,則可以將其包裝在:
If(!Page.IsPostback) {
// only execute when the page first loads
}
並為您的ImageButton設置一個OnClick事件
在Asp.Net Web窗體配置中,單擊ImageButton應該觸發ImageButton_OnClick類型的事件。 在您的標記中或在Page_Init事件方法中,您都需要連接以下事件處理程序:
在標記中:
<asp:imagebutton click="ImageButton_Onclick" runat="server" id="displayYImgBtn" />
在后面的代碼中:
public void Page_Init() {
displayYImgBtn.Click += ImageButton_OnClick;
}
在這兩種模型中,都應該創建按鈕,並且方法應在回發時執行(單擊按鈕時)。
如果希望在觸發按鈕單擊事件之前設置其他配置信息,則需要在Page.Load事件或Page.Init事件中進行設置。 無論何時選擇接觸控件並設置變量,都不得以任何方式將其從發回狀態更改。 如果ImageButton的格式不完全像以前一樣,則您將不會收到回發事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.