ASP.net页面生命周期问题
本文关键字:周期 问题 生命 net ASP | 更新日期: 2023-09-27 17:50:22
我了解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
集合中有一个值,如果它不是postback或其他控制引起的postback,它不应该出现
有很多不同的方法来解决这个问题。
- 将
Page_Load
代码放在OnPreRender
上。这将在RaisePostBackEvent
之后发生,因此可以保证任何按钮的点击都已被处理。重要的是要注意,根据你要做的事情,它可能不起作用。有些组件不接受此类后续事件中的某些属性更改。如果有效,这是推荐的方法。 在你的按钮上创建一个新的事件,当你改变ImageButton的命令参数时触发。然后,在Page_Load上,为新按钮的事件创建一个处理程序,并将示例中Page_Load中的代码放在那里。使用这种方法将导致此处理在OnPreRender之前发生。
我想这取决于你的Page_Load事件中还发生了什么。
如果该变量是在page_load中设置的,可以用:
If(!Page.IsPostback) {
// only execute when the page first loads
}
为你的ImageButton添加一个OnClick事件
. Net webforms配置中,ImageButton点击应该触发ImageButton_OnClick类型的事件。无论是在标记中还是在Page_Init事件方法中,都需要连接以下事件处理程序:
在标记:<asp:imagebutton click="ImageButton_Onclick" runat="server" id="displayYImgBtn" />
在代码后面:
public void Page_Init() {
displayYImgBtn.Click += ImageButton_OnClick;
}
在任何一个模型中,你的按钮都应该被创建,你的方法应该在回发时执行(当按钮被点击时)。
如果您希望在触发按钮单击事件之前设置其他配置信息,则需要在页面中执行该操作。Load事件,或Page。初始化事件。无论什么时候你选择接触到你的控制和设置变量,你都不能以任何方式改变它从它被发布回来的状态。