我理解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";
答案 0 :(得分:3)
您可以随时直接检查帖子变量。如果单击了提交按钮,它将在Request.Form
集合中有一个值,如果它不是回发或其他一些控件导致回发,则不应该出现。
答案 1 :(得分:1)
有多种不同的方法可以解决这个问题。
Page_Load
代码放在OnPreRender
上。这将在RaisePostBackEvent
之后发生,因此可以保证已经处理了任何按钮的点击。重要的是要注意,取决于你将要做什么,它可能无法正常工作。某些组件在此类事件中不接受某些属性更改。如果它有效,这是推荐的方法。答案 2 :(得分:0)
我想这取决于你的Page_Load事件中发生了什么。
如果在page_load中设置了该变量,则可以将其包装在:
中If(!Page.IsPostback) {
// only execute when the page first loads
}
只为你的ImageButton有一个OnClick事件
答案 3 :(得分:0)
在Asp.Net webforms配置中,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没有像之前那样完全格式化,那么您将不会收到回发事件。