C# 在同一控件的另一个onclick中防止onclick
我有一个带有onclick事件的按钮C# 在同一控件的另一个onclick中防止onclick,c#,asp.net,event-handling,onclick,C#,Asp.net,Event Handling,Onclick,我有一个带有onclick事件的按钮 <asp:Button ID="btn_Save" runat="server" Text="Save" OnClick="btn_Save_Click"/> 我调试后发现第一个出现在第二个之前 我想取消第一次的第二次点击 为什么我需要2次点击事件: 我有一个webcontrol(BulkEditGridView),它将Button控件作为参数,该控件保存整行。第二次单击事件充当保存整个表。现在,我在webcontrol中添加了一些字段,我希望
<asp:Button ID="btn_Save" runat="server" Text="Save" OnClick="btn_Save_Click"/>
我调试后发现第一个出现在第二个之前
我想取消第一次的第二次点击
为什么我需要2次点击事件:
我有一个webcontrol(BulkEditGridView),它将Button控件作为参数,该控件保存整行。第二次单击事件充当保存整个表。现在,我在webcontrol中添加了一些字段,我希望在单击按钮时阻止保存。由于无法修改WebControl事件处理程序(第二次单击事件),因此添加了第一个onclick事件。我想做的是,如果其中一个字段(例如:文本框字段)为空,则阻止保存gridview,这可以通过阻止默认的单击事件来完成。我不知道是否正确理解了您的查询
((Button)btn).Click -= new EventHandler(SaveClicked);
使用删除第一个方法-=
然后添加第二个方法,然后再次添加第一个方法
因此,您将首先执行第二个方法
同样,不确定,只需从按钮单击事件中删除第二个事件处理程序
((Button)btn).Click -= new EventHandler(SaveClicked);
但当您不需要第二个事件处理程序时,为什么要添加它
您也可以通过反射删除事件处理程序,您可以尝试此代码,但未经测试
BindingFlags AllBindings = BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;
List<FieldInfo> lst = new List<FieldInfo>();
foreach (EventInfo ei in btn.GetType().GetEvents(AllBindings))
{
Type dt = ei.DeclaringType;
FieldInfo fi = dt.GetField(ei.Name, AllBindings);
if (fi != null)
lst.Add(fi);
}
foreach (FieldInfo fi in lst)
{
EventInfo ei = btn.GetType().GetEvent(fi.Name, AllBindings);
if (ei != null)
{
object val = fi.GetValue(btn);
Delegate mdel = (val as Delegate);
if (mdel != null)
{
foreach (Delegate del in mdel.GetInvocationList())
ei.RemoveEventHandler(btn, del);
}
}
}
BindingFlags AllBindings=BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;
List lst=新列表();
foreach(btn.GetType().GetEvents中的EventInfo ei(所有绑定))
{
dt型=ei.去极化型;
FieldInfo fi=dt.GetField(ei.Name,所有绑定);
如果(fi!=null)
一加二(fi);
}
foreach(第一层中的FieldInfo fi)
{
EventInfo ei=btn.GetType().GetEvent(fi.Name,AllBindings);
如果(ei!=null)
{
对象值=fi.GetValue(btn);
委托mdel=(val作为委托);
如果(mdel!=null)
{
foreach(mdel.GetInvocationList()中的委托del)
ei.移除Venthandler(btn,del);
}
}
}
它将删除所有事件处理程序。有关详细信息,您可以查看此链接。是否需要编写此事件处理程序,这会导致在
btn\u Save\u Click
中再次单击另一个按钮。您可以删除此行或更改代码行的顺序……它们不在同一类中,因此“SaveClicked”从第一次点击看不到。