-1

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

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

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

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

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

提前致谢。

4

3 回答 3

1

在您的用户控件中创建事件

例如:-

public event EventHandler<CustomEventArgs> Click;

和一个处理程序

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

还要处理用户控件上的鼠标单击(mouseleftbuttonup)(并从那里触发您的事件)。IE

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

在 ASP.NET 页面中,您可以注册用户控件事件并进行处理:

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

protected myctr_click(object sender, CustomEventArgs e){
//do anything
}
于 2010-07-28T11:27:55.080 回答
0

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

所有回发的控件都使用 __doPostBack('clientid', '') 方法回发到服务器。您的标签也需要这样做。在控件内部,控件需要实现 IPostBackEventHandler 来处理这些事件,并引发点击事件。

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

于 2010-07-28T11:27:12.170 回答
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)
{

}

正如评论中提到的黄色青蛙,您可以通过将其进一步包装在更新面板中以进行异步回发来扩展它。

于 2010-07-28T11:36:13.450 回答