假设您需要将一些JavaScript功能附加到ASP.NET用户控件,其中任何给定页面上可能有多个实例。因为JavaScript具有共享全局状态,您可以使用哪些技术来保持控件的每个实例的客户端状态和行为分开?
答案 0 :(得分:2)
嗯,你可以做的主要是确保你的JavaScript函数足够抽象,以至于它们没有耦合到HTML控件的特定实例 - 让它们接受允许你传递各种对象实例的参数。
无论您在给定页面上拥有多少用户控件实例,只需在页面中存在一次即可完成任何魔法的JavaScript应该只存在一次,因此您的功能需要忽略这一事实。
如果没有关于你要做什么的更多信息,我可以提供更多的帮助;这取决于你的情况。
编辑:我处理此问题的特定方面的一种方法是在用户控件上创建一个静态属性(因此它是跨多个实例的相同变量),用于跟踪各种用户控件元素的客户端ID (用户控件在 控件的 OnLoad事件中将客户端ID添加到此列表中);然后,在 页面的 OnPreRender事件(IIRC)中,在我的代码知道要在客户端上查找并运行的JavaScript变量中渲染它们。我不知道这是否有意义,但它可能对某人有帮助......
答案 1 :(得分:0)
function <%=this.ClientID %>_myButton_onclick()
{
DoSomething();
}
和
<button id="myButton" onclick="<%=this.ClientID %>_myButton_onclick()">
请注意,在这种情况下,控件是常规HTML控件。
答案 2 :(得分:0)
如果你的控件有多个函数,你可以把它放在一个外部的js文件中并引用它。
this.Page.ClientScript.RegisterClientScriptInclude("searchcontrol.js","includes/searchcontrol.js");