2010-07-28 122 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