2010-07-28 119 views
-1

我有一個關於在ascx自定義web控件內創建和管理事件的問題。按下時在ascx控件上創建點擊事件

我已經創建了一個非常笨控制由在含有ASP一個div:標籤控制,它是一個非常簡單的結構:

<div id="mydiv" runat="server"> 
    <asp:Label id="mylabel" text="Text"... /> 
</div> 

即,非常簡單。 我想添加一個事件:點擊。我想讓用戶在頁面上添加此控件並將處理程序附加到該事件,以便單擊此控件時可以執行某些操作。這似乎是一個奇怪的解決方案,就像我試圖再次發明按鈕控制,即:我的自定義按鈕。 嗯,爲了解決這個問題,我想在我的div中添加一個javascript,並調用一個js函數,使用ajax機制調用服務器端函數。 那麼如何從這裏調用服務器端功能。我發佈了一個關於如何從客戶端調用服務器端函數的問題,並得到了一些答案(其中許多人告訴我使用PageMethods),好像頁面方法不起作用,它會編譯,但運行並單擊我時控制和執行js(在PageMethods.mymethod()行)這裏我有一個錯誤 - > Java腳本異常:無法識別的方法。它似乎沒有找到PageMethod。

那麼,考慮到我的目標,我該怎麼辦? 啊,一個解決方案,如:使用標籤中的點擊事件是不是我想要的,因爲點擊事件必須觸發,當我點擊div時,考慮我可能設置一個大的填充,以便一個大的空白空間可以提供一個大可點擊面積。

在此先感謝。

+0

如果您想要Ajax回發的UpdatePanel樣式,或者需要「標準」Ajax回發,則需要先解決。如果你想要後者,那麼你應該專注於讓你的PageMethods方法起作用。如果你想要前者,那麼有解決方案。 – Yellowfog 2010-07-28 11:24:49

回答

1

在用戶控件創建一個事件

如: -

public event EventHandler<CustomEventArgs> Click; 

和處理

public void OnClick() 
{ 
if(this.Click !=null) 
{ 
    //what ever else you do 
    this.Click(new CustomEventArgs(...)); 
} 
} 

而且處理鼠標點擊(mouseleftbuttonup)在用戶控制(並激活您的事件fr那裏)。即

protected void OnMouseDown(...){ this.OnClick(); } 

從ASP.NET頁面,您可以註冊用戶控制事件和處理:

MyControl.Click += new EventHandler<CustomEventArgs>(myctr_click) 

protected myctr_click(object sender, CustomEventArgs e){ 
//do anything 
} 
+0

好的,所以每個ascx控件都帶有點擊等事件?我不知道這....我知道,這是我需要的感謝 – Andry 2010-07-28 12:27:59

0

PageMethods在頁面類中使用Web服務;我假設你想回發到服務器並在頁面中處理這個點擊,對吧?

回發的所有控​​件都使用__doPostBack('clientid','')方法回發到服務器。你的標籤也需要這樣做。在控件中,控件需要實現IPostBackEventHandler來處理這些事件,並引發點擊事件。

看看這個例子:http://www.myviewstate.net/blog/post/2009/05/14/Implementing-IPostBackEventHandler-in-an-ASPNET-Control.aspx

+0

對不起,我只是不想回復,無論如何,你告訴我一些新的東西,所以,即使這不是應用它的情況,謝謝! :) – Andry 2010-07-28 12:29:50

0

我可能誤解了你的要求,但你不能只包裹在DIV一個asp:linkbutton

<asp:LinkButton ID="lnkSomething" runat="server" OnClick="lnk_something_Click"> 
<div id="mydiv" runat="server"> 
<asp:Label id="mylabel" text="Text"... /> 
</div> 
</asp:LinkButton> 

,然後在服務器端:

protected void lnk_something_Click(object sender, EventArgs e) 
{ 

} 

由於yellowfrog在評論中提到的,你可以再進一步包裹它的更新面板的異步回發擴展此。

+1

對不起,這不是我想要的,無論如何感謝您的幫助,我找到了正確的答案... :) – Andry 2010-07-28 12:28:59