2010-07-20 61 views
3

我有一個用戶控制一個LinkBut​​ton,它已與處理:處理從父ASP.NET頁面中用戶控件Click事件LinkBut​​ton的

Private Sub LoginLinkLinkButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginLinkLinkButton.Click 
     Response.Redirect("/", True) 
End Sub 

在某些ASPX頁面,我想處理從點擊該頁面的代碼背後,與用戶控件內部相反。我如何覆蓋頁面後面父代碼的控件中的句柄?

更新: 基礎上的答案,我已經更新了用戶控制:

Public Event LoginLinkClicked As OnLoginClickHandler 
Public Delegate Sub OnLoginClickHandler(ByVal sender As Object, ByVal e As EventArgs) 

[...] 

Private Sub LoginLinkLinkButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginLinkLinkButton.Click 
     **If OnLoginClickHandler IsNot Nothing Then** 
      RaiseEvent LoginLinkClicked(Me, e) 
     Else 
      Response.Redirect("/", True) 
     End If 
End Sub 

的問題是確定正確的語法,如果線,因爲上面是無效的。

+0

我不知道這是可能的或沒有,但你肯定能考慮將邏輯分離成一箇中心類,您的ASPX和ASCX事件處理程序都會調用它。 – TimS 2010-07-20 15:54:49

+0

我更新了我的答案。這是您的更新的有效翻譯嗎? – GenericTypeTea 2010-07-20 17:45:35

+0

我不知道這會有所幫助,基本上我想定義一個默認行爲,並在幾頁上覆蓋默認行爲。它歸結爲找到一種方法來查詢處理程序是否在VB.NET中有訂閱者。 – Josh 2010-07-20 17:45:58

回答

3

您必須從用戶控件公開新事件。道歉如下面的代碼是所有C#,它是一個漫長的時間,因爲我感動VB.Net,但你應該得到的想法:

您可以通過添加使用委託事件下面你UserControl

public event OnLoginClickHandler LoginClick; 
public delegate void OnLoginClickHandler (object sender, EventArgs e); 

然後調用以下到您的LinkBut​​ton Click事件:

protected void LoginLinkLinkButton_Click(object sender, EventArgs e) 
{ 
    // Only fire the event if there's a subscriber 
    if (OnLoginClickHandler != null) 
    { 
     OnLoginClickHandler(sender, e); 
    } 
    else 
    { 
     // Not handled, so perform the standard redirect 
     Response.Redirect("/", true); 
    } 
} 

然後,您可以只掛鉤到日是你的ASPX標記內:

<asp:LinkButton runat="server" ID="Foo" OnLoginClick="Foo_LoginClick" /> 

並在您你的服務器端事件處理程序將如下:

protected void Foo_LoginClick_Click(object sender, EventArgs e) 
{ 
    // This event was fired from the UserControl 
} 

UPDATE

我覺得你這是怎麼翻譯事件訂閱檢查到VB.Net:

If LoginClick IsNot Nothing Then 
    RaiseEvent LoginClick(sender, e) 
End If 
+0

好的解決方案。我在翻譯if(OnLoginClickHandler!= null) { OnLoginClickHandler(sender,e); } 我會發布我的問題。 – Josh 2010-07-20 16:17:30

+0

這會產生以下錯誤:'OnLoginClickHandler'是一種類型,不能用作表達式。 – Josh 2010-07-20 17:50:04

+0

@Josh - 我重新更新了它,我的錯誤! – GenericTypeTea 2010-07-20 17:57:43

1

我想你應該看看下面的代碼和鏈接。

Parent Page aspx.cs part 

public partial class getproductdetails : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Button btnYes = (Button)ucPrompt.FindControl("btnYes"); 
    btnYes.Click += new EventHandler(ucPrompt_btnYes_Click); 
} 

void ucPrompt_btnYes_Click(object sender, EventArgs e) 
    { 
    //Do Work 
    } 
} 

瞭解更多詳細信息,它是如何工作(參考): -

Handle events of usercontrol in parent page in asp.net

Calling a method of parent page from user control

相關問題