从ASP.NET用户控件中提升javascript事件并在ASP.NET页面中处理

时间:2008-12-31 14:17:24

标签: asp.net javascript events

在ASP.NET页面中,我有一个用户控件,我想使用javascript在其中执行一些操作。当该操作完成后,我想提出一个事件(再次在javascript中),由包含的ASP.NET页面(再次在javascript中)提取。

我想这样做的原因是因为我在页面上有多个用户控件,我需要在一个用户控件中执行的操作,以便在不进行回发的情况下在另一个用户控件中实例化操作。

有谁知道怎么做?

非常感谢。


嗨,谢谢你的回复。 我想要做的是创建某种形式的封装。因此,如果javascript代码在一个用户控件中执行某些操作,则用户控件不应该知道其他位置的影响。它会在javascript中引发一个事件,可以通过asp.net页面呈现的javascript来获取它,如果需要,它可以在另一个用户控件中调用javascript方法。 这里的想法也是为了消除对回发的任何需要。

希望这会让它更好。

2 个答案:

答案 0 :(得分:6)

我认为实现所描述内容的简单方法是忘记JavaScript事件,并为用户控件提供“回调”功能。

我实现它的方式是在用户控件上公开一个公共属性,它取名为JavaScript“callback-function”。然后,用户控件负责在完成客户端作业后调用此函数。

因此,使用用户控件的页面必须实现此JavaScript“回调函数”,然后将属性中的名称提供给用户控件。

有道理吗?

答案 1 :(得分:0)

您只需从用户控件的呈现HTML中运行所需的javascript即可。

<a href="javascript:doSomething();">Click Me</a>

通过想要在JavaScript中创建某种形式的控制器的事物的声音。当页面加载每个控件时,向控制器注册。然后,其中一个控件中的一个操作会在控制器上运行一个函数,该函数会对使用它注册的控件执行某些操作。

您的JavaScript可以像以下一样简单:

var oControls = new Array();

doSomething = function() { for(var i=0;i<oControls.length;i++) { var oControl = document.getElementById(oControls[i]); oControl...... } }

因此,您需要在用户控件渲染方法中使用ScriptManager注册您的控件。

ScriptManager.RegisterStartupScript(Me, Me.GetType(), "Startup", String.Format("oControls.push('{0}');", ClientID), True);