繁体   English   中英

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

[英]Raising javascript event from an ASP.NET user control and handling in ASP.NET page

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

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

有谁知道如何做到这一点?

非常感谢。


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

希望这会更好地表现出来。

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

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

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

说得通?

您只需从用户控件的呈现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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM