2013-03-27 31 views
0

我有一個usercontrol,在重定向到新頁面之前,從父頁面調用保存方法。UserControl調用父方法 - 看看是否發生錯誤

如果錯誤或異常拋出父保存方法,它似乎被忽略,孩子仍然重定向。有沒有一種方法來監聽異常,或者某種方式來防止重定向,即保存方法沒有完全執行。

下面是有問題的usercontrol代碼。

this.Page.GetType().InvokeMember(stepGuide.SaveMethod, System.Reflection.BindingFlags.InvokeMethod, null, this.Page, null); 
AppPageMethods.RedirectToPage(button.CommandArgument); 

我很欣賞的答覆,但我希望能保持這種儘可能模塊化...

目前正在對大約15頁使用的用戶控制,所以我已經添加了用戶控制到Master頁面。這些頁面的功能完全獨立,用戶控件只是用作第一次使用的附加圖層(導覽)。用戶控件僅由查詢字符串中的參數激發,並且關於當前父頁面的所有信息都是從數據庫的一行中加載的。

我相信這給了我更多的靈活性,因爲這個控件將被添加到更多頁面中。要將這個用戶控制功能添加到新頁面,我只需要在db中添加一個新行,並確保父級的save方法是公開的,這是我真正喜歡的方法。

有沒有辦法處理/監聽從usercontrol的父ApplicationException幾乎沒有改變到每個父頁面?

回答

0

在您的父頁面(稱爲函數)中,確保不會吞下異常,這樣您就可以從調用者那裏捕獲錯誤並正確處理它。另外,如果你是特定的異常,那麼捕捉和處理這些異常將會像一般異常一樣理想。

0

SaveMethod返回一個布爾值,並執行下列操作:

try 
{ 
    if(this.Page.GetType().InvokeMember(stepGuide.SaveMethod, 
     System.Reflection.BindingFlags.InvokeMethod, null, this.Page, null)) 
    { 
     AppPageMethods.RedirectToPage(button.CommandArgument); 
    } 
    else 
    { 
     // Do something else 
    } 
} 
catch (Exception ex) // Better still, use specific exceptions 
{ 
    // Handle exception 
} 

而且,如果SaveMethod正在處理自己的例外,這就是爲什麼調用方法忽略它。在這種情況下,您必須在catchSaveMethod(或更好的是,不處理您實際想要向調用方冒泡的異常)中輸入raise;

編輯:但討論提高事件的其他答案肯定是更好的方法。

3

UserControl調用父控件(或頁面)中方法的「正確」方式是讓usercontrol引發父控件偵聽(訂閱)的事件。

這樣做是爲了使usercontrol與任何控件都沒有很強的聯繫。例如,如果要在其他頁面中重新使用控件,則必須將代碼添加到usercontrol,以便知道調用哪個「父」方法。您正在執行的方法可能會很快變得混亂。

一個額外的好處是,你不會有你現在面臨的問題。如果拋出錯誤,你可以用「正常」的方式處理它。

3

正確的方法是將事件從子頁面冒泡到父頁面。沒有其他的方式。

因此,父頁面可以註冊該事件並利用它(如果它有用)或完全忽略它。

就是這樣。

// Parent ASPX 
<uc1:ChildControl runat="server" ID="cc1" OnSomeEvent="cc1_SomeEvent" /> 

// Parent 
protected void cc1_SomeEvent(object sender, EventArgs e) 
{ 
    // Handler event 
} 

// Child 
public event EventHandler OnSomeEvent; 

protected void ErrorOccurInControl() 
{ 
    if (this.OnSomeEvent != null) 
    { 
      this.OnSomeEvent(this, new EventArgs()); 
    } 
} 

protected override void OnLoad(EventArgs e) 
{ 
    ErrorOccurInControl(); 
} 
+0

我們應該結合我們的答案。 「爲什麼」和「如何」:) – 2013-03-27 20:29:32

+0

@ShaiCohen當然,請隨意使用/修改代碼。 – Win 2013-03-27 20:30:45

相關問題