使用Javascript的ASP.NET Web用户控件在页面上多次使用 - 如何使javascript函数指向正确的控件

时间:2010-04-12 21:08:30

标签: asp.net javascript web-user-controls

我想我在标题中总结了这个问题。这是一些进一步的阐述......

我有一个在多个地方使用的网络用户控件,有时在给定页面上不止一次。

Web用户控件具有一组特定的JavaScript函数(主要是jQuery代码),这些函数包含在* .js文件中并自动插入到页眉中。

但是,当我想在页面上多次使用该控件时,* .js文件被包含在'n'次,并且正确地说,浏览器对于执行哪个控件感到困惑哪个功能在。

为解决此问题,我需要做什么?我一整天都在盯着这个,我很茫然。

所有评论都非常感谢。

杰森

3 个答案:

答案 0 :(得分:4)

如果问题只是多次嵌入同一文件并导致冲突,请查看使用RegisterClientScriptInclude。如果对RegisterClientScriptInclude的所有调用使用相同的标识符,则只嵌入该文件的一个实例:

http://msdn.microsoft.com/en-us/library/2552td66.aspx

但是,如果问题是您的方法被调用但是他们不知道页面上的哪些控件可以操作,那么您需要弄清楚如何为JS提供一些上下文。在客户端定义一个代表您的控件的JavaScript对象,并在服务器端发出调用,该调用将使用您将要操作的控件的客户端ID对其进行实例化。

答案 1 :(得分:1)

我们正在使用CustomValidator来验证用户控件。控件工作正常,直到您在同一页面上删除Control的两个实例,因为它们引用完全相同的JavaScript函数,只有一个控件可以工作。解决方法,我们使用控件ID附加JavaScript函数名称。

Validate_SAPDepartment<% =ControlId %>(oSrc, args) {...}

在代码隐藏中,我们同意了ClientValidationFunction

CustomValidator1.ClientValidationFunction = "Validate_SAPDepartment" + this.ControlId

这可能不是正确的方法,但它有效。

答案 2 :(得分:0)

我之前遇到过这种情况。您使用ScriptManager在页面中注册一个单独的JavaScript文件。如果您愿意,可以将其作为嵌入到dll中的资源文件进行流式传输。 然后你只需要从你的控件中调用函数。

否则,完全独立的jquery文件也可能有效。