按下时在ascx控件上创建单击的事件

时间:2010-07-28 11:15:06

标签: c# asp.net events web-controls pagemethods

我有一个关于在ascx自定义Web控件中创建和管理事件的问题。

我创建了一个非常愚蠢的控件,包含一个包含asp:Label控件的div,它是一个非常简单的结构:

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

那很简单。 我想添加一个事件:点击。我想让用户在页面上添加此控件并将处理程序附加到此事件,以便在单击此控件时可以执行某些操作。这似乎是一个奇怪的解决方案,就像我试图再次发明按钮控件,即:我的自定义按钮。 好吧,要发起这个事件,我想在我的div中添加一个javascript并调用一个js函数,使用ajax机制调用服务器端函数。 那么如何从这里调用服务器端功能。我发布了一个关于如何从客户端调用服务器端功能的问题,并得到了一些答案(其中许多人告诉我使用PageMethods),好像看起来页面方法不起作用,它编译但运行时点击我的控制和执行js(在PageMethods.mymethod()行中)我有一个错误 - &gt; Java脚本异常:无法识别的方法。似乎找不到PageMethod。

嗯,考虑到我的目标,我该怎么办? 啊,像这样的解决方案:使用标签中的click事件不是我想要的,因为点击事件必须在我点击div时触发,考虑我可能设置一个大的填充,这样一个大的空白空间可以提供一个大的可点击区域。

提前致谢。

3 个答案:

答案 0 :(得分:1)

在用户控件中创建一个事件

例如: -

public event EventHandler<CustomEventArgs> Click;

和处理程序

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

还可以在用户控件上处理鼠标单击(mouseleftbuttonup)(并从那里触发事件)。即。

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

从ASP.NET页面,您可以注册用户控件事件并处理它:

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

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

答案 1 :(得分:0)

PageMethods在页面类中使用Web服务;我假设您想要回发到服务器并在页面中处理此单击,对吧?

回发的所有控​​件都使用__doPostBack('clientid','')方法回发到服务器。你的标签需要做同样的事情。在控件中,控件需要实现IPostBackEventHandler来处理这些事件,并引发click事件。

查看此示例:http://www.myviewstate.net/blog/post/2009/05/14/Implementing-IPostBackEventHandler-in-an-ASPNET-Control.aspx

答案 2 :(得分: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,您可以通过在更新面板中进一步将其包装为异步回发来扩展它。