我有 ASPX 网页,上面有一个按钮。一旦用户单击此按钮,请求将提交到服务器并执行按钮单击事件处理程序。
我有一些必须驻留在 Page.Load 上的逻辑,但此逻辑取决于请求是否已通过按钮单击提交。基于页面生命周期的事件处理程序在页面加载后执行。
问题:如何在页面加载中找出页面加载后将执行哪些事件处理程序?
我有 ASPX 网页,上面有一个按钮。一旦用户单击此按钮,请求将提交到服务器并执行按钮单击事件处理程序。
我有一些必须驻留在 Page.Load 上的逻辑,但此逻辑取决于请求是否已通过按钮单击提交。基于页面生命周期的事件处理程序在页面加载后执行。
问题:如何在页面加载中找出页面加载后将执行哪些事件处理程序?
@akton 的答案可能是您应该做的,但如果您想取消预订并确定在生命周期早期导致回发的原因,您可以查询回发数据以确定点击了什么。但是,这不会为您提供在事件处理期间将执行的实际函数/处理程序。
首先,如果不是Button
/ImageButton
引起了回发,控件的 ID 将位于__EVENTTARGET
. 如果 aButton
引起了回发,那么 ASP.NET 会做一些“可爱的”事情:它会忽略所有其他按钮,因此只有单击的按钮会显示在表单上。AnImageButton
有点不同,因为它会发送坐标。您可以包括的实用功能:
public static Control GetPostBackControl(Page page)
{
Control postbackControlInstance = null;
string postbackControlName = page.Request.Params.Get("__EVENTTARGET");
if (postbackControlName != null && postbackControlName != string.Empty)
{
postbackControlInstance = page.FindControl(postbackControlName);
}
else
{
// handle the Button control postbacks
for (int i = 0; i < page.Request.Form.Keys.Count; i++)
{
postbackControlInstance = page.FindControl(page.Request.Form.Keys[i]);
if (postbackControlInstance is System.Web.UI.WebControls.Button)
{
return postbackControlInstance;
}
}
}
// handle the ImageButton postbacks
if (postbackControlInstance == null)
{
for (int i = 0; i < page.Request.Form.Count; i++)
{
if ( (page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y")))
{
postbackControlInstance = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length-2) );
return postbackControlInstance;
}
}
}
return postbackControlInstance;
}
话虽如此,如果您可以重构您的控件/页面以延迟执行,那么如果您使用@akton 建议的范例,您的代码将更加清晰/更加健壮。
这个问题可能有更好的解决方案。您是否希望代码仅在页面首次加载并且您正在使用回发时运行?如果是这样,请检查Page.IsPostBack属性。如果代码不需要在其他事件处理程序之前运行,请将其移至OnPreRender,因为它会在事件处理程序之后触发。
这些对我帮助很大:我想从我的网格视图中保存值,它正在重新加载我的网格视图/覆盖我的新值,因为我的 PageLoad 中有 IsPostBack。
if (HttpContext.Current.Request["MYCLICKEDBUTTONID"] == null)
{ //Do not reload the gridview.
}
else { reload my gridview. }
来源:http ://bytes.com/topic/asp-net/answers/312809-please-help-how-identify-button-clicked