【问题标题】:Creating a clicked event on ascx control when pressed按下时在 ascx 控件上创建单击事件
【发布时间】:2010-07-28 11:15:05
【问题描述】:

我有一个关于在 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脚本异常:无法识别的方法。好像没有找到 PageMethod。

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

提前致谢。

【问题讨论】:

  • 您需要首先确定您是否需要 UpdatePanel 样式的 Ajax 回发,或者是否需要“标准”Ajax 回发。如果您想要后者,那么您应该专注于让您的 PageMethods 方法发挥作用。如果你想要前者,那么有解决方案。

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


【解决方案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
}

【讨论】:

  • 好的,所以每个 ascx 控件都带有一些事件,比如点击等等?我不知道这个......我明白了,这就是我需要的谢谢
【解决方案2】:

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

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

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

【讨论】:

  • 对不起,我只是不想回帖,反正你告诉我一些新的东西,所以,即使这不是应用它的情况,谢谢! :)
【解决方案3】:

我可能误解了您的要求,但您不能将 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)
{

}

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

【讨论】:

  • 对不起,这不是我想要的,无论如何感谢您的帮助,我找到了正确的答案... :)
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 2014-03-05
  • 1970-01-01
  • 2018-06-17
  • 2012-07-23
  • 1970-01-01
  • 2014-02-23
  • 2013-11-24
相关资源
最近更新 更多