2012-08-28 36 views
0

的另一个的onclick内的onclick我有一个按钮与一个onclick事件防止同一控制

<asp:Button ID="btn_Save" runat="server" Text="Save" OnClick="btn_Save_Click"/> 

我有,因为它可以在下面可以看到此按钮的第二onclick事件。

((Button)btn).Click += new EventHandler(SaveClicked); 

我调试,看到的第一个,第二个之前发生,

我想从第一个的onclick取消第二。

为什么我需要2个单击事件: 我有一个三夏(BulkEditGridView),这需要一个Button控件作为参数,而且这种控制可以节省整个行。第二次点击事件起到保存整个表的作用。现在,我添加了一些字段到我的webcontrol,并且我想防止单击按钮时保存。由于我无法修改webcontrols eventhandler(第二次点击事件),因此我添加了第一个onclick事件。我想要做的是,如果其中一个字段(例如:文本框字段)为空,则可以通过阻止默认的单击事件来阻止保存gridview。

+1

为什么你需要2个处理程序? – JleruOHeP

+0

是有必要写这个事件处理程序,这是造成的onClick在'btn_Save_Click'..you另一个按钮可以删除此行或更改代码的行的顺序... –

+0

我已经更新的问题。 – HOY

回答

0

Session变量可以使用。

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

+0

他们不在同一个班级,所以从第一次onclick就看不到“SaveClicked”。 – HOY