[英]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.