我想我总结了标题中的问题。这里有一些进一步的阐述......
我有一个在多个地方使用的网络用户控件,有时在给定页面上不止一次。
Web 用户控件具有一组特定的 JavaScript 函数(主要是 jQuery 代码),这些函数包含在 *.js 文件中并自动插入到页眉中。
但是,当我想在一个页面上多次使用该控件时,*.js 文件会被包含“n”次,因此,浏览器会混淆它应该在哪个控件上执行哪个功能.
为了解决这个问题,我需要做什么?我整天都在盯着这个,我很茫然。
非常感谢所有评论。
杰森
我想我总结了标题中的问题。这里有一些进一步的阐述......
我有一个在多个地方使用的网络用户控件,有时在给定页面上不止一次。
Web 用户控件具有一组特定的 JavaScript 函数(主要是 jQuery 代码),这些函数包含在 *.js 文件中并自动插入到页眉中。
但是,当我想在一个页面上多次使用该控件时,*.js 文件会被包含“n”次,因此,浏览器会混淆它应该在哪个控件上执行哪个功能.
为了解决这个问题,我需要做什么?我整天都在盯着这个,我很茫然。
非常感谢所有评论。
杰森
如果问题仅仅是同一个文件被多次嵌入并导致冲突,请考虑使用RegisterClientScriptInclude
. 如果您对所有对 RegisterClientScriptInclude 的调用使用相同的标识符,则只会嵌入该文件的一个实例:
http://msdn.microsoft.com/en-us/library/2552td66.aspx
但是,如果问题是您的方法正在被调用,但他们不知道要操作页面上的哪些控件,那么您需要弄清楚如何为您的 JS 提供一些context。在客户端定义一个表示您的控件的 JavaScript 对象,并在服务器端发出调用,该调用将使用您将在其上操作的控件的客户端 ID 实例化它。
我们CustomValidator
用于验证用户控制。该控件可以正常工作,直到您在同一页面上放置两个控件实例,因为它们引用完全相同的 JavaScript 函数,只有一个控件可以工作。解决方法是,我们在 JavaScript 函数名称中附加了控件 ID。
Validate_SAPDepartment<% =ControlId %>(oSrc, args) {...}
在代码隐藏中,我们分配了ClientValidationFunction
CustomValidator1.ClientValidationFunction = "Validate_SAPDepartment" + this.ControlId
这可能不是正确的方法,但它有效。
我以前也有过这种情况。您使用 ScriptManager 向页面注册一个单独的 JavaScript 文件。如果您愿意,您可以将其作为嵌入到 dll 中的资源文件进行流式传输。然后,您只需从您的控件调用函数。
否则,一个完全独立的 jquery 文件也可以工作。