2012-08-28 31 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