在ASP.NET页面中,我有一个用户控件,我想使用javascript在其中执行一些操作。当该操作完成后,我想提出一个事件(再次在javascript中),由包含的ASP.NET页面(再次在javascript中)提取。
我想这样做的原因是因为我在页面上有多个用户控件,我需要在一个用户控件中执行的操作,以便在不进行回发的情况下在另一个用户控件中实例化操作。
有谁知道怎么做?
非常感谢。
嗨,谢谢你的回复。 我想要做的是创建某种形式的封装。因此,如果javascript代码在一个用户控件中执行某些操作,则用户控件不应该知道其他位置的影响。它会在javascript中引发一个事件,可以通过asp.net页面呈现的javascript来获取它,如果需要,它可以在另一个用户控件中调用javascript方法。 这里的想法也是为了消除对回发的任何需要。
希望这会让它更好。
答案 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);