我有一个带onclick事件的按钮
<asp:Button ID="btn_Save" runat="server" Text="Save" OnClick="btn_Save_Click"/>
我有这个按钮的第二个onclick事件,因为它可以在下面看到。
((Button)btn).Click += new EventHandler(SaveClicked);
我调试并看到第一个发生在第二个之前,
我想从第一个中取消第二个onclick。
为什么我需要2次点击活动 我有一个webcontrol(BulkEditGridView),它将Button控件作为参数,此控件保存整行。第二次单击事件充当保存整个表。现在我在webcontrol中添加了一些字段,我想在单击按钮时阻止保存。由于我无法修改webcontrols事件处理程序(第二次单击事件),因此我添加了第一个onclick事件。我要做的是,如果其中一个字段(例如文本框字段)为空,则阻止保存gridview,这可以通过阻止默认点击事件来完成。
答案 0 :(得分:2)
只需从按钮点击事件中删除第二个事件处理程序。
((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);
}
}
}
它将删除所有事件处理程序。有关详细信息,请查看此链接http://www.codeproject.com/Articles/103542/Removing-Event-Handlers-using-Reflection
答案 1 :(得分:0)
我不知道我是否正确理解了您的查询。
使用 - =删除第一个方法 然后添加第二个方法,然后再添加第一个方法。
因此,您将首先执行第二种方法。
再次,不确定
答案 2 :(得分:0)
可以使用会话变量。